• 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 {
       100px;
      height: 30px;
      border: 1px solid #000000;
    }
    .item-col-count {
      background-color: #ffffff;
    }
    .item-col-count-s {
      background-color: red;
    }
    

      

    将来的自己,会感谢现在不放弃的自己!
  • 相关阅读:
    AJAX需要注意的
    SEO 搜索引擎优化
    jQuery 插件
    CSS BFC和IE Haslayout
    jQuery 插件开发
    jQuery Ajax
    jQuery 工具函数
    jQuery 动画效果
    jQuery 高级事件
    jQuery 事件对象
  • 原文地址:https://www.cnblogs.com/TheYouth/p/15371935.html
Copyright © 2020-2023  润新知