javascript - 单击一个组件中的按钮不会改变 React.js 中其他组件的值

标签 javascript reactjs

我试图让按钮在 React.js 中增加一个值来学习两个组件之间的通信。一个组件只是一个显示 +1 的按钮,另一个组件是一个将在单击该按钮时递增的值。

我已经编写了这段代码,但无法找到为什么没有显示值。

注意:我只有一天的 React.js 经验。

这是我的代码:

<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" href="style.css">

  </head>

  <body>
    <div id="root"></div>
    <script src="https://unpkg.com/react@15.3.2/dist/react.js"></script>
    <script src="https://unpkg.com/react-dom@15.3.2/dist/react-dom.js"></script>
    <script src="https://unpkg.com/babel-core@5.8.38/browser.min.js"></script>
    <script src="https://unpkg.com/jquery@3.1.0/dist/jquery.min.js"></script>
    <script src="https://unpkg.com/remarkable@1.6.2/dist/remarkable.min.js"></script>

    <script type="text/babel">
      var Button = React.createClass({
        render : function(){
          return (
            <button>+1</button>
          )
        }
      });

      var Counter = React.createClass({
        render : function(){
          return (<div>Hello {this.props.updValue}</div>); 
        } 
      }); 

      var App = React.createClass({
        getInitialState : function(){
          return {count : 0 };
        },
        increment : function(){
          this.setState({counter:this.state.count + 1});
        },
        render: function(){
          return ( 
            <div>
                <Button onClick={this.increment} updValue={this.state.count}/>
                <Counter />
            </div>
            );
        }
      });

      ReactDOM.render(<App />,document.getElementById("root"));
    </script>
  </body>

</html>

( https://plnkr.co/edit/SVTfEc5jx5Q15B1c07GB )

编辑:从 Piotr Berebecki 的代码中学习后,我修改了现有代码以添加已创建 Click 的值。 https://plnkr.co/edit/VL5961FB0mrm4QlxuO9T

最佳答案

请查看此演示:http://codepen.io/PiotrBerebecki/pen/NRdAON以及下面的 React 代码。

我在您的代码中注意到的问题:

  • 在您使用的increment()函数中
    this.setState({counter:this.state.count + 1}); 应该是 this.setState({count:this.state.count + 1});
  • App 呈现方法中,您使用了 onClick 事件。这应该在 Button 组件本身的 render 方法中。
  • 您还需要一个从父项 (App) 传递给子项 (Button) 的 Prop (为清楚起见,我将其命名为 passClick) . Button 然后可以在它的 handleClick() 方法中使用这个属性。然后 App 会调用 increment() 方法接收它。

react 代码:

var Button = React.createClass({
  handleClick: function() {
    console.log('1. Received click in Button');
    this.props.passClick();
  },
  render: function() {
    return (
      <button onClick={this.handleClick} >+1</button>
    )
  }
});

var Counter = React.createClass({
  render: function() {
    return (<div>Hello {this.props.updValue}</div>);
  }
});

var App = React.createClass({
  getInitialState: function() {
    return {
      count: 0
    };
  },
  increment: function() {
    this.setState({
      count: this.state.count + 1
    });
    console.log('2. Received click in App');

  },
  render: function() {
    return (
      <div>
        <Button passClick={this.increment}/>
        <Counter updValue={this.state.count}/>
      </div>
    );
  }
});

关于javascript - 单击一个组件中的按钮不会改变 React.js 中其他组件的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39630543/

相关文章:

javascript - 我如何在 React 中循环遍历 JSON 对象

javascript - 垃圾收集如何处理 mobx-utils 中的异步操作?

javascript - 使用 Node js 验证 Google ID token

javascript - 使用 Socket IO 从数据库获取数据时使用 React 的哪种生命周期方法

reactjs - 无法捕获 Deck.gl@^7.1.10 中包含的 Marker 子项的 onClick 事件

javascript - GatsyJS、GraphQL - 通过数组发布映射。

javascript - 在 ember.js 中读取由带有 Handlebars 的服务注入(inject)的计算属性

javascript - 主干 'this' 上下文传递给渲染

javascript - 我可以使用 momentjs 获取两个日期之间以年和月为单位的差异吗?

javascript - Uncaught ReferenceError : Link is not defined React