• React组件


    React 组件

    自定义组件

    1、我们可以使用函数定义了一个组件:
    
    function HelloMessage(props) {
        return <h1>Hello World!</h1>;
    }
    
    你也可以使用 ES6 class 来定义一个组件:
    
    class Welcome extends React.Component {
      render() {
        return <h1>Hello World!</h1>;
      }
    }
    
    2.const element = <HelloMessage /> 为用户自定义的组件。
    
    注意,原生 HTML 元素名以小写字母开头,而自定义的 React 类名以大写字母开头,比如 HelloMessage 不能写成 helloMessage。除此之外还需要注意组件类只能包含一个顶层标签,否则也会报错。
    
    如果我们需要向组件传递参数,可以使用 this.props 对象
    
    *注意* 在添加属性时, class 属性需要写成 className ,for 属性需要写成 htmlFor ,这是因为 class for JavaScript 的保留字。

    复合组件

    通过创建多个组件来合成一个组件,即把组件的不同功能点进行分离

    React State(状态)

    React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。

    将生命周期方法添加到类中

     Clock 组件第一次加载到 DOM 中的时候,我们都想生成定时器,这在 React 中被称为挂载。
    
    当 Clock 生成的这个 DOM 被移除的时候,我们也会想要清除定时器,这在 React 中被称为卸载。

    生命周期函数

    componentDidMount()元素挂载完成之后触发的生命周期函数=== Vue中的mounted
    
    //修改state的唯一方法
    
    this.setState() 修改数据
    
    @param 要修改的数据
    @parma 修改完成之后的回调函数
    
        this.setState({
            index:this.state.index + 1
        },()=>{
        console.log(this.state.index)
            
        })
    
    componentDidMount() 与 componentWillUnmount() 方法被称作生命周期钩子
    
    在组件输出到 DOM 后会执行componentDidMount() 钩子,我们就可以在这个钩子上设置一个定时器。
    
    this.timerID 为计算器的 ID,我们可以在 componentWillUnmount() 钩子中卸载计算器。

    数据自顶向下流动

    状态通常被称为局部或封装
    
    称为自顶向下或单向数据流

    React Props

    state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变。这就是为什么有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据。
    
    
    1.通过组件类的 defaultProps 属性为 props 设置默认值
    
    2.Props 验证使用 propTypes

    事件的this指向

    call 和 apply 改变this指向
    (传递参数不同)
    bind 只改变this指向不会执行
    
    ()=>{}  函数调用 + 执行
    
    bind(this) 返回一个函数 只调用
    
    调用  ()
    执行  在声明时指向
    
    e.target 触发事件的Dom
    
    e.currentTarget 绑定事件的Dom

    事件

    阻止事件的默认行为
    e.preventDefault()

    组件数据传递

    父=>子
    
        props
    
    子=>父
    
    1.父组件
    
        父组件页面的(子)组件上定义一个事件
        <List  listItem={this.listItem.bind(this)}></List>
        
        listItem(res){
            console.log(res)
        }
        
    2.子组件 
    
        <p onClick={()=>this.props.listItem(传递的数据)}></p>
  • 相关阅读:
    LeetCode题解(2)-- Add Two Numbers
    LeetCode题解(1)--Two Sum
    STL review:vector & string & map & struct
    机器学习导论(一) 基本概念
    Single Number
    Single Number II
    Copy List with Random Pointer
    Word Break
    Populating Next Right Pointers in Each Node II
    Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/2oex/p/9569174.html
Copyright © 2020-2023  润新知