美文网首页
React之State

React之State

作者: 我向你奔 | 来源:发表于2018-09-11 09:48 被阅读14次

State

如何组织数据是程序的最重要问题。Raect组件的数据分为两种:prop和state。无论prop还是state的改变,都可能引发组件的重新渲染。

状态state和属性props十分相似,但是状态是私有的,完全受控于当前组件。prop是组件的对外接口,state是组件的内部状态。由于React不能直接修改传入的prop,所以需要记录自身数据变化,就要使用state。

state和prop的区别

  1. prop用于定义外部接口,state用于记录内部状态
  2. prop的赋值在父组件使用该组件时,state的赋值在该组件内部
  3. 组件不可修改prop的值,而state存在的目的就是让组件来改变
    组件的state,相当于组件的记忆,其存在意义就是被改变,每一次通过this.setState 函数修改state就改变了组件的状态,然后通过渲染过程把这种变化体现出来。

正确使用state

  1. 不要直接更新装状态,构造函数是唯一能够初始化this.state 的地方。如果直接修改组件的内部状态,虽然事实上改变了组件的内部状态,但只是野蛮的修改了state,但没有驱动组件进行重新渲染。而this.setState() 函数所做的事情,就是先改变this.state的值,然后驱动组件重新渲染
this.state.comment = "hello";   // wrong
this.setState({comment: "hello"});
  1. 状态更新可能是异步的,setState 是异步更新的,而不是同步更新。例子:
setYear() {
  let {year} = this.state
  this.setState({
    year: year + 10  // 新值
  })
  console.log(this.state.year)  // 旧值
}
setYear() {
 setTimeout(() => {
     this.setState({
        year: year + 10  // 新值
     })
  console.log(this.state.year)   // 新值
  }) 
}

因为 this.prop 和 this.state 可能是异步更新的,不应该依靠它们的来计算下一个状态。

// wrong
this.setState({
    counter: this.state.counter + this.props.increment,
})

要修复它,要使用第二种形式的 setState() 来接受一个函数而不是一个对象。该函数将接收先前的状态作为第一个参数,将此次更新被应用时的 props 做为第二个参数:

// correct
this.setState((prevState, props) => ({
    counter: prevState.counter + props.increment,
}))
  1. 状态更新合并,可以调用 setState() 独立更新它们,但React将多个 setState() 调用合并成一个调用来提高性能。
componentDidMount() {
    fetchPosts().then(response => {
        this.setState({
            posts: response.posts
        });
    });
    fetchComments().then(response => {
        this.setState({
            comments: response.comments
        });
    });
}

这里的合并是浅合并,也就是说 this.setState({comments}) 完整保留了 this.state.posts,但完全替换了this.state.comments。

  1. 回调函数,由于setState 是异步更新,如果需要确定setState 更新后,再进行某些操作,可以使用setState 的回调函数。
this.setState({
    val: value
}, () => {
    this.ref.editInput.focus()
})

相关文章

  • React之State

    State 如何组织数据是程序的最重要问题。Raect组件的数据分为两种:prop和state。无论prop还是s...

  • react之state

    在vue中,在不考虑vuex的时候,组件的数据来源有两个, props和data。而在react中组件的数据来源也...

  • react学习笔记--state以及setState

    在react中通过state以及setState() 来控制组件的状态。 state state 是 react ...

  • React Native 学习之路

    React 相关资料 React Components React Properties React State ...

  • react源码剖析——(二)解密setState机制

    state是React中重要的概念。总所周知,React通过this.state来访问state,通过this.s...

  • React hooks之useRef

    接react hooks之effect、state[https://www.jianshu.com/p/b493a...

  • React基础

    react 教程 react 组件介绍 react state 介绍 react Props 介绍 React:组...

  • React之状态(State)

    在React当中,当你更新组件的state,然后新的state就会重新渲染到页面中。在这个时候不需要你操作任何DO...

  • 004|React之State

    在JSX中,每一个组件除了props属性外,还有一个state属性。注意state全部为小写。 例如,下面的代码中...

  • 浅谈react中的state和props

    1、state的作用 state是React中组件的一个对象,React中,更新组件的state,会导致重新渲染用...

网友评论

      本文标题:React之State

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