当前位置: 首页 > 面试题库 >

使用React将状态值递增1

齐昊苍
2023-03-14
问题内容

在React中,我试图使按钮增加一个状态存储的值。但是,使用下面的代码使用handleClick时,我的值设置为undefined或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使用回调函数。

检查有关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>


 类似资料:
  • 但是控制台显示一个错误: 未捕获的 DOMException:无法在 “History” 上执行 'pushState':无法克隆 Symbol(react.element)。 这是什么意思?对此我能做些什么?

  • 问题内容: 我有一个带有提交按钮的表单。该表单调用一个onclick函数,该函数将某物的状态从false设置为true。然后,我想将此状态传递回父级,这样,如果为true,则呈现componentA;如果为false,则呈现componentB。 我会如何反应?我知道我需要使用状态或道具,但不确定如何使用它。这也与单向流动反应原理矛盾吗? ComponentA代码: 控制其显示内容的父组件: 问题

  • 问题内容: 我是第一次使用React-router,但现在还不知道如何思考。这是我在嵌套路由中加载组件的方式。 入口点.js App.js 因此,我的App的子级是我发送的内容组件。我使用的是Flux,我的App.js具有状态并侦听更改,但是我不知道如何将该状态传递给this.props.children 。在使用react-router之前,我的App.js显式定义了所有子级,因此传递状态是自然

  • 我有一个表单,它有一个提交按钮。该表单调用一个函数onclick,该函数将某物的状态从false设置为true。然后我想把这个状态传递回父级,这样如果为true,它将呈现componentA,如果为false,它将呈现componentB。 我会如何反应呢?我知道我需要使用状态或道具,但不知道如何使用。这是否与单向流反应原理相矛盾?? 组件A代码: 控制其显示内容的父组件:

  • 问题内容: 我有一个具有与组件本身相同类型的子组件的组件。我也可以渲染孩子,但是孩子似乎无法访问他们的状态。我在Redux中使用React 另外,我正在使用Material-ui中的ListItem(它们最终呈现在List组件中),并且我的代码受到官方redux回购中的树视图示例的严重影响。我的状态如下所示: 所示状态与树状示例中的状态相同 问题答案: 好吧,如果我理解正确,那么您希望这些组件从r

  • 我想用React useState钩子设置多个状态值,这样我就可以用useEffect钩子分别更新它们。我有以下代码: 但是当我用React DevTools检查应用程序时,我会看到钩子的多个“状态”值,而不是“订单”、“支付”、“提交”等。