美文网首页
React笔记 (函数组件&类组件)

React笔记 (函数组件&类组件)

作者: PYFang | 来源:发表于2020-12-28 17:36 被阅读0次
    什么是组件
    • 能跟其他物件 合起来的物 ,就是组件
    • 组件并没有明确的定义,靠感觉理解 就行
    • 就目前而言,一个返回 React 元素的 函数 就是组件
    • Vue 里,一个 构造选项 就可以表示一个组件
    一、函数组件
    const welcome = () => {
      return (
        <h2>Hello,fang</h2> 
      )
    }
    使用方法:<Welcome />
    

    上面代码是函数组件的基本写法

    添加props(外部数据)
    const welcome = ( props ) => {
      return (
        <h2>Hello,{ props.name }</h2> 
      )
    }
    使用方法:<Welcome name="fang" />
    

    上面代码传入 props 为外部数据,直接读取参数
    props.name 来获取外部传入的数据。

    添加state(内部数据)
    const welcome = ( props ) => {
      const [ n, setN ] = React.useState(0)
      return (
        <h2>Hello,{ props.name }</h2> 
        <span>{ n }</span>
        <button onClick={ () => { setN (n + 1) } }>点我+1</button>
      )
    }
    使用方法:<Welcome name="fang" />
    

    useState 返回数组,第一项读,第二项写
    [n, setN] 这个数组的第一项是用来 读取 数据,第二项则是用来 改写 数据,当我们调用 setN 时是不会改变 n 的,只会产生一个新的 n

    函数组件注意事项

    • 类组件的 this.setState 会等一会改变,而函数组件的 setN 是永远不会改变,只会重新产生一个新的
    • 跟类组件类似的地方:
      也要通过 setX(新值) 来更新 UI
    • 跟类组件不同的地方:
      没有 this ,一律用参数和变量
    一、类组件
    class Welcome extends React.Component{
      constructor(){
        super()
        this.state={}
      }
      render(){
        return(
          <h2>Hello,fang</h2> 
        )
      }
    }
    export default Welcome 
    使用方法:<Welcome />
    

    上面代码是类组件的基本写法

    添加props(外部数据)
    class Welcome extends React.Component{
      constructor(){
        super()
        this.state={}
      }
      render(){
        return(
          <h2>Hello,{ this.props.name }</h2> 
        )
      }
    }
    export default Welcome
    使用方法:<Welcome name="fang" />
    

    上面代码直接读取属性 this.props.name 来获取外部传入的数据。

    添加state(内部数据)
    class Welcome extends React.Component {
      constructor() {
        super()
        this.state = {
          n: 0
        }
      }
      add() {
        this.setState({
          n: this.state.n + 1
        })
      }
      render() {
        return (
          <div>
            <h2>Hello,{this.props.name}</h2>
            <span>{n}</span>
            <button onClick={() =>  this.add() }>
              点我 + 1
           </button>
          </div>
        )
      }
    }
    export default Welcome
    使用方法:<Welcome name="fang" />
    

    上面代码 this.state 读取数据,this.setState 改写数据

    类组件注意事项

    • this.state.n += 1 无效?
      其实 n 已经改变了,只不过 UI 不会自动更新,调用 setState 才会触发 UI 更新(异步更新),因为 React 没有像 Vue 监听 data 一样监听 state
    • setState 会异步更新 UI
      setState 之后,state 不会马上改变,立马读 state 会失败,更推荐的方式是 setState( 函数 )
    add(){
      this.setState( state => {
           let n = state.n + 1
            return { n }
         })
    }
    // 函数式setState写法
    <button onClick={ () =>  this.add() }>
    点我+1
    </button>
    
    • this.setState(this.state) 不推荐?
      React 希望我们不要修改旧的 state (不可变数据)
      常用代码:
      setState( { n : state.n + 1 } )
    

    注:
    这是一种理念(函数式),喜欢就用,不喜欢就用 Vue

    相关文章

      网友评论

          本文标题:React笔记 (函数组件&类组件)

          本文链接:https://www.haomeiwen.com/subject/ejtviktx.html