首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反应简单状态管理

反应简单状态管理
EN

Stack Overflow用户
提问于 2018-06-19 20:24:42
回答 2查看 60关注 0票数 0

我有一个简单的组件,状态很小。我想要一个按钮点击,以改变状态为其他东西。现在,我看到了一个意想不到的标记错误,并且不太明白为什么。

以下是代码:

代码语言:javascript
复制
// Component to practice simple state mgmt
import React from 'react'

class Stateful extends React.Component{
  state = {
    flag: true,
    text: "I am simple text"
  }
  render() {
    return(
      <div>
        <h2>Small State example</h2>
        <p>{this.state.text}</p>
        <button onClick={
          this.setState(
            prevState=>({
              flag: !prevState.flag,
              text: prevState.text.toUpperCase()
            })
      }>Click to change state</button>
      </div>
    )
  }
}

export default Stateful
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-19 20:33:16

您在您的)函数中缺少了一个onClick,并且没有正确地使用它。您需要使用一个函数并为onclick事件调用它,如下面的() => ...

代码语言:javascript
复制
 render() {
    return (
      <div>
        <h2>Small State example</h2>
        <p>{this.state.text}</p>
        <button onClick={ () =>
          this.setState(
            prevState=>({
              flag: !prevState.flag,
              text: prevState.text.toUpperCase()
            }))
      }>Click to change state</button>
      </div>
    )
  }

与单独的函数相比,我更喜欢提取onClick处理程序。这样我们的渲染方法就会更干净。

代码语言:javascript
复制
handleClick = () =>
    this.setState(
      prevState => ({
        flag: !prevState.flag,
        text: prevState.text.toUpperCase()
      }))

 render() {
    return (
      <div>
        <h2>Small State example</h2>
        <p>{this.state.text}</p>
        <button onClick={this.handleClick}>Click to change state</button>
      </div>
    )
  }
票数 1
EN

Stack Overflow用户

发布于 2018-06-19 20:33:47

您没有为单击事件分配处理程序。您直接调用setState,这是不好的,因为您处于render方法中,状态更改会导致重呈现,从而有效地创建无限循环。

您还缺少了一个)

所以用吧

代码语言:javascript
复制
<button onClick={()=>
      this.setState(
        prevState=>({
          flag: !prevState.flag,
          text: prevState.text.toUpperCase()
        }))
  }>Click to change state</button>

https://codesandbox.io/s/j2x9jm38y5的工作演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50936393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档