zoukankan      html  css  js  c++  java
  • react16学习笔记

    todolist 简单实例

    Todo.js

    import React,{Component,Fragment} from 'react'
    import TodoList from './TodoList'
    
    class Todo extends Component{
      constructor(){
        super()
      }
    
      state = {
        inputVal:'',list:['1','2','3']
      };
    
      handleInputChange = (e)=>{
        let inputVal = e.target.value;
        this.setState(() => ({inputVal}))
      };
    
      handleButtonClick = ()=>{
        this.setState((prevState) => {
          return {
            list:[...prevState.list,prevState.inputVal],inputVal:''
          }
        })
      };
    
      handleItemClick =(index,event)=>{
        this.setState((prevState) => {
          const list = [...prevState.list];
          list.splice(index,1);
          return {list}
        })
      };
    
      render(){
        return (<Fragment>
          <div><input type="text" value={this.state.inputVal} onChange={this.handleInputChange}/>
            <button onClick={this.handleButtonClick}>提交</button>
          </div>
          <TodoList handleItemClick={this.handleItemClick} list={this.state.list}/>
        </Fragment>)
      }
    }
    
    export default Todo

    TodoList.js

    import React from 'react'
    import PropTypes from 'prop-types'
    import TodoItem from './TodoItem'
    
    const TodoList = function(props){
      return (<ul>
        {props.list.map((item,index) => {
          return <TodoItem key={index} index={index} item={item} handleItemClick={props.handleItemClick.bind(this,index)}/>
        })}
      </ul>)
    };
    
    TodoList.propTypes = {
      list:PropTypes.array.isRequired,handleItemClick:PropTypes.func.isRequired
    };
    
    export default TodoList

    TodoItem.js

    import React from 'react'
    import PropTypes from 'prop-types'
    import TodoItem from './TodoItem'
    
    const TodoList = function(props){
      return (<ul>
        {props.list.map((item,index) => {
          return <TodoItem key={index} index={index} item={item} handleItemClick={(event) => props.handleItemClick(index,event)}/>
        })}
      </ul>)
    };
    
    TodoList.propTypes = {
      list:PropTypes.array.isRequired,handleItemClick:PropTypes.func.isRequired
    };
    
    export default TodoList

    https://reactjs.org/docs/handling-events.html   react 处理事件

    • 驼峰命名
    • 方法以事件的方式传递,而不是字符串
    • jsx中this没有默认绑定,需要使用bind绑定,否则this会是undefined
    • 可以在调用的地方使用箭头函数改变this指向,不过--这种写法会在组件每次render的时候重新创建,在以参数传递函数给子组件的情况下,子组件会发生不必要的重新渲染;
    • 也可以在class中直接使用箭头函数的方式申明方法,现在还在试验阶段,在create-react-app可以直接使用
    • 在子组件回调父组件函数需要传参的情况下,event始终是函数的第二个参数----如果使用bind,将会自动传递;如果是箭头函数,要显式写出;
    <button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button>
    <button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>

    https://reactjs.org/docs/typechecking-with-proptypes.html react props校验

    https://reactjs.org/docs/lists-and-keys.html   react 循环渲染结构

    • 使用map
    • 使用key---在同一级是独一无二的,diff用;不能作为他用;

    https://reactjs.org/docs/forms.html react 可控表单  updated with setState

    https://reactjs.org/docs/uncontrolled-components.html react 不可控表单. 

    https://reactjs.org/docs/composition-vs-inheritance.html react  组合代码

    • props不仅可以传递数据和事件,也可以是jsx结构
    • props.children直接获取到组件内部的jsx结构,这是唯一的

    https://reactjs.org/docs/fragments.html   react fragments<框???>

    • react render时只允许有一个根组件,这会迫使我们新增dom结构,或是
    • 特定的dom组合标签,table>tr>td,在td外边包裹其他dom结构会导致dom失效,这些情况下使用fragments代表根组件并会在渲染成dom时自动忽略

     https://reactjs.org/docs/refs-and-the-dom.html react refs

    • could be an instance of a React component, not a function components
    • could be a DOM element
  • 相关阅读:
    Yii Listview 更新及搜索
    Yii框架CGridView columns中使用数组或变量传值
    冲刺七天---05
    冲刺七天---04
    爱心图书剧本描述
    冲刺七天----03
    冲刺七天---02
    冲刺七天---01
    PSP周总结03
    psp周总结02
  • 原文地址:https://www.cnblogs.com/Merrys/p/9849197.html
Copyright © 2011-2022 走看看