javascript - 将一个 React 组件的内容注入(inject)到另一个 onClick

标签 javascript reactjs

好吧,我开始了解 ReactJs,但一直被一个简单的概念所困扰,这个概念对于普通的旧式 jQuery 来说简直就是轻而易举。

当点击事件发生在另一个元素上时,我希望能够添加到屏幕上一个元素的内容。继react tutorial我完全理解他们实现添加到评论列表的方式,评论列表是设置状态的父级的子级..但这肯定不是唯一的方法,因为它感觉非常僵化和不灵活。

这是我想要解释的内容的简单模型。单击按钮后,我想将新内容注入(inject)到 ID 为“newComments”的 div 中。 JSBin:http://jsbin.com/vokufujupu/1/edit

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/react.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/JSXTransformer.js"></script>
</head>
<body>
  <div id="content"></div>
  <script type="text/jsx">

      var InputBox = React.createClass({
          clickHandler: function(){
              //Append a new string to the end of the existing copy in the copy box
              alert('after this alert the value of the button should be appended to the content of the div#newComments');

          },
          render: function() {
              return (
                      <div classNmae="copyBox">
                          <input type="button" name="inputButton" value="click me button" className="bbbc"
                          onClick={this.clickHandler}  />
                      </div>
              );
          }
      });

      var CopyBox = React.createClass({
          render: function() {
              return (
                 <div classNmae="copyBox">
                    <p>div#newComments:</p>
                    <div id="newComments"></div>
                 </div>
              );
          }
      });

      var Page = React.createClass({
          render: function() {
                return (
                  <div>
                      <CopyBox/>
                      <InputBox/>
                  </div>
              );
          }
      });

      React.render(
              <Page/>,
              document.getElementById('content')
      );

  </script>

  <!-- The equiv in plain old js -->
  <script type="text/javascript">
    function newContent(obj){
      document.getElementById('vanBox').innerHTML = document.getElementById('vanBox').innerHTML + obj.value;
    }
  </script>
  <div id="vanilaJsEquiv">
    <div id="vanBox"></div>
    <input type="button" value="ClickyClik" onclick="newContent(this)"/>
  </div>    

</body>
</html>

我一直在谷歌和 yonks 的文档中寻找答案,但找不到答案。

最佳答案

在 React 中,没有操作 HTML/DOM 的概念。 React 只负责根据组件状态进行渲染。每个组件都会呈现其当前状态。

所以你需要操纵其他组件的状态。为此,Facebook 正在使用 Flux。这是一个有点复杂的工作流程,但是一旦你掌握了它,它实际上是非常简单的概念。

在一个组件上单击即可调度一个操作。该操作将触发事件,订阅该事件的商店将作出 react 并更新内部状态。更新后,存储会发出更改事件,所有监听该存储中更改的组件都会更新。

是的,您将需要编写更多代码。如果组件正在操纵它自己的状态,那么它会变得更加简单,那么只需在组件内部调用 this.setState({ ... }) 就足够了。是的,还有其他方法可以做到这一点。

关于javascript - 将一个 React 组件的内容注入(inject)到另一个 onClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293037/

相关文章:

javascript - 使用链接将 HTML 文件加载到 DIV 中

javascript - 抛出错误消息无法在 OOP Javascript 三元运算符上编译

javascript - 状态改变错误

reactjs - 尝试设置 redux 历史记录以便我可以重定向

javascript - 使用 Jasmine 使用异步 api 测试 Flux 存储

reactjs - React Router v4 - 使用不同的查询参数重定向到相同的路由

javascript - 仅当使用 LayersControl 缩放级别 > 8 时,才在 Shiny 中显示传单 map 中的图层?

javascript - 具有相同名称参数的表单的 JSON Stringify

javascript - jQuery:无限循环过程

javascript - DOM 节点和 javascript 命名空间之间有什么关系?