reactjs - 使用 React 将状态值加一

标签 reactjs state

在 React 中,我试图让按钮增加状态中存储的值。 但是,使用下面的函数代码,在使用handleClick 时,我的值设置为未定义或NaN。

class QuestionList extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value: 0};

    // This binding is necessary to make `this` work in the callback
    this.handleClick = this.handleClick.bind(this);
  }

   handleClick = (prevState) => {
    this.setState({value: prevState.value + 1});
    console.log(this.state.value)
  }

你能告诉我为什么会发生这种情况吗?根据此处的文档,它应该是正确的: https://facebook.github.io/react/docs/state-and-lifecycle.html

最佳答案

因为您错误地使用了handleClick函数。这里:

handleClick = (prevState) => { .... }

prevState 将是传递给handleClick函数的事件对象,您需要将prevState与setState一起使用,如下所示:

handleClick = () => {
    this.setState(prevState => {
       return {count: prevState.count + 1}
    })
}

另一个问题是,setState 是异步的,因此 console.log(this.state.value) 不会打印更新后的状态值,您需要将回调函数与 setState 一起使用。

查看有关async behaviour of setState的更多详细信息以及如何检查更新后的值。

检查工作解决方案:

class App extends React.Component {
 
   constructor(props){
       super(props);
       this.state={ count: 1}
   }
 
  onclick(type){
      this.setState(prevState => {
         return {count: type == 'add' ? prevState.count + 1: prevState.count - 1}
      });
  }

   render() {
    return (
      <div>
        Count: {this.state.count}
        <br/>
        <div style={{marginTop: '100px'}}/>
        <input type='button' onClick={this.onclick.bind(this, 'add')} value='Inc'/>
        <input type='button' onClick={this.onclick.bind(this, 'sub')} value='Dec'/>
       </div>
     )
   }
}

ReactDOM.render(
  <App />,
  document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id='container'></div>

关于reactjs - 使用 React 将状态值加一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42364838/

相关文章:

javascript - 如何在 React 中的 this.setState 之后正确渲染组件

java - 在 ListView 中更改数据时保持所选元素的状态

stream - 使用 Kafka Streams 进行简单分类

javascript - React 状态值未定义

javascript - react : Passing state from child to child to parent

javascript - 三元运算符不适用于 this.state React js

javascript - 尝试根据筛选器选择使用字符串值填充数组,并通过将数组与记录属性的字符串值进行比较来筛选记录

javascript - 如何为同一状态保存不同的输入值

javascript - react native : Attempted to assign to readonly property

javascript - React Hook - 我总是从 useState 获取陈旧的值,因为子组件永远不会更新