问题 Reactjs附加一个元素而不是替换


我正在尝试遍历列表/数组/对象:(我使用coffeescript来保持清晰, jsfiddle的完整JS在这里。 但它只是一个forEach)

pages = for page, each of @props.ids
    $('#start').append("<div id='"+page+"' ></div>")
    React.renderComponent page(title: each.title, text: each.text), $("#"+page)[0]

并附加每个,而不是替换,只留下列表中的最后一项。

在哪里 #start element是起始容器,我想用多个元素填充它,但是我需要给每个自己的容器,否则它们都将覆盖彼此,默认的reactjs行为。

我想知道是否有办法告诉反应追加而不是替换div。

如果可能的话,我想避免使用jquery,并且完全做出反应。

我虽然给了这个 React.renderComponent  page 初始列表,然后在之前调用的模板中迭代,然后,我面临一个不同的问题,我必须 return 一个reactjs元素对象,由整个列表组成,我真的不喜欢它。

我需要初始调用来创建单独的,独立的反应模板,在列表中附加彼此,可以在没有任何额外容器的情况下,或者使用jquery。


1847
2018-03-11 18:55


起源



答案:


我认为你的概念错了。反应过来的 renderComponent 确实在某处呈现单个组件。多次执行此操作只会在该位置重新呈现相同的组件(也就是幂等)。没有真正的“附加”声明,至少不是你要求的方式。

这是你想要实现的一个例子。忘了 renderComponent 在这。只是将组件放在某个地方。

/** @jsx React.DOM */
var pages = [{title: 'a', text: 'hello'}, {title: 'b', text: 'world'}];

var App = React.createClass({
  render: function() {
    return (
      <div>
        {
          this.props.pages.map(function(page) {
            return <div>Title: {page.title}. Text: {page.text}</div>;
          })
        }
      </div>
    );
  }
});

React.renderComponent(<App pages={pages} />, whateverDOMNodeYouWantItToBeOn);

看看我在那里做了什么?如果我想要多个 divs,我只是想创造尽可能多的东西。它们代表了应用的最终外观,因此也是如此 div 被多次“追加”在这里并没有多大意义。


15
2018-03-11 20:05



我想要追加它的原因是保持它是一个单独的组件,所以我可以单独更新或修改每个页面。我需要访问状态和willComponentUpdate。设置得到。树状json代表dom,当我改变json,dom变化,基本上 - TrySpace
在React中执行此操作非常容易。如果您需要更多帮助,请访问irc #reactjs频道。 - chenglou
是 renderComponent 弃用? - John Doe
答案有点过时,但是,它被称为 React.render 现在。 - chenglou
现在就是Actualy ReactDOM.render - Dionys


答案:


我认为你的概念错了。反应过来的 renderComponent 确实在某处呈现单个组件。多次执行此操作只会在该位置重新呈现相同的组件(也就是幂等)。没有真正的“附加”声明,至少不是你要求的方式。

这是你想要实现的一个例子。忘了 renderComponent 在这。只是将组件放在某个地方。

/** @jsx React.DOM */
var pages = [{title: 'a', text: 'hello'}, {title: 'b', text: 'world'}];

var App = React.createClass({
  render: function() {
    return (
      <div>
        {
          this.props.pages.map(function(page) {
            return <div>Title: {page.title}. Text: {page.text}</div>;
          })
        }
      </div>
    );
  }
});

React.renderComponent(<App pages={pages} />, whateverDOMNodeYouWantItToBeOn);

看看我在那里做了什么?如果我想要多个 divs,我只是想创造尽可能多的东西。它们代表了应用的最终外观,因此也是如此 div 被多次“追加”在这里并没有多大意义。


15
2018-03-11 20:05



我想要追加它的原因是保持它是一个单独的组件,所以我可以单独更新或修改每个页面。我需要访问状态和willComponentUpdate。设置得到。树状json代表dom,当我改变json,dom变化,基本上 - TrySpace
在React中执行此操作非常容易。如果您需要更多帮助,请访问irc #reactjs频道。 - chenglou
是 renderComponent 弃用? - John Doe
答案有点过时,但是,它被称为 React.render 现在。 - chenglou
现在就是Actualy ReactDOM.render - Dionys