React-Props 一/列表渲染/条件渲染
购物车框架效果图
# 1. Props 1.1 Props/列表渲染/条件渲染 什么是Props? 当React元素作为自定义组件,将JSX所接受的属性转换为单个对象传递给组件,这个对象被称为"Props" 父组件传给子组件参数对象(属性) Props是组件固有属性 子组件内部不可以对Props进行修改 更新Props时,需要通过父组件重新传入新的props,更新子组件. React是一个单向数据流 创建组件 class PropListItem extends Component 接受父组件传递的Props constructor(props) { super(props); // 如果不写下面这句会报警告 this.state = {}; } # 函数组件 ListItemFun.jsx 1. sfc 快捷方式 无状态组件 2. 函数组件是没有this关键字的 3. 不管是函数组件/还是类组件都会通过babel来转换成浏览器可以执行的代码 4. props 是通过函数的参数传递过来的 5. 没有生命周期 优点 轻量 没有状态时可以使用 # 类组件 ListItem.jsx 创建组件 class PropListItem extends Component 称为类组件 # 列表渲染 js表达式来实现列表渲染 Arr.map(function (item) { return _ }) map方法会生成一个新的数组, 列表渲染需要为每一项设置key { dataList.map( item => { return <PropListItem key={item.id} data={item}/> }) } # 条件渲染 vue v-if react 1. 三目运算符 <div className={`item-col item-col-count${count < 1 ? '' : '-s' }`}>{count}</div> 2. 使用函数条件作判断 // 通过函数方式来作条件渲染 renderList () { if (dataList.length === 0) { return <div className="text-center">购物车是空的</div> } return dataList.map( item => { return <PropListItem key={item.id} data={item}/> }) } render() { return ( { this.renderList() } ) } 3. 使用与运算符 && 判断 {dataList.length === 0 && <div className="text-center">购物车是空的</div> }
关键代码如下:
app.js 函数组件
import './App.css'; import PropsList from './Props/List' function App() { return ( <div className="App"> <PropsList /> </div> ); } export default App;
PropsList 组件 类组件
import React, { Component } from 'react' import PropListItem from './ListItem' // 类组件 // import PropListItem from './ListItemFun' // 函数组件 const dataList = [ { id: 1, name: '笔记本1', price: 4500, stock: 12 }, { id: 2, name: '笔记本2', price: 14500, stock: 4 }, { id: 3, name: '笔记本3', price: 7800, stock: 122 } ] class PropsList extends Component { // 通过函数方式来作条件渲染 renderList () { if (dataList.length === 0) { return <div className="text-center">购物车是空的</div> } return dataList.map( item => { return <PropListItem key={item.id} data={item}/> }) } render() { return( <div className="container"> {/* {dataList.length === 0 && <div className="text-center">购物车是空的</div> } */} {/* <PropListItem data={dataList[0]}/> <PropListItem data={dataList[1]}/> <PropListItem data={dataList[2]}/> */ this.renderList() } </div> ) } } export default PropsList
ListItem 组件 类组件
import React, { Component } from 'react' import './list.css' let count = 0 class PropListItem extends Component { constructor(props) { super(props); // 如果不写下面这句会报警告 this.state = {}; } render () { let data = this.props.data return ( <div className="item-row"> <div className="item-col">{data.name}</div> <div className="item-col">{data.price}</div> {/* 三目运算符来作条件判断 */} <div className={`item-col item-col-count${count < 1 ? '' : '-s' }`}>{count}</div> </div> ) } } export default PropListItem
ListItem 组件 函数组件 只用来测试,只要代码还是参考上面的类组件
import React from 'react' import './list.css' let count = 0 const ListItem = (props) => { return ( <div className="item-row"> <div className="item-col">{props.data.name}</div> <div className="item-col">{props.data.price}</div> <div className="item-col">{count}</div> </div> ) } export default ListItem
list.css
.item-row { margin-top: 20px; display: flex; } .item-col { width: 100px; height: 30px; border: 1px solid #000000; } .item-col-count { background-color: #ffffff; } .item-col-count-s { background-color: red; }
将来的自己,会感谢现在不放弃的自己!