如何在react.js中使用setProps

314*_*926 12 reactjs

我想setProps从外面打电话,myComponent以便能够动态更改数据myComponent.
我希望在更改组件的道具后,它会重新渲染自己.

我正在尝试以下方法:

var myComponent = React.createClass({
  render: function () {
    return (
      React.DOM.div(null, this.props.data)
    );
  }
});

React.renderComponent(
  myComponent({ data: someData }),
  document.getElementById('predictionContent')
);

myComponent.setProps({data: someData2});
Run Code Online (Sandbox Code Playgroud)

问题是我不明白如何使用setProps组件.就我而言,我收到"未定义"错误.

怎么解决这个?

Dou*_*las 23

警告: setProps现在已经过时.

React.createClass返回一个类,它React.renderComponent返回具有该setProps方法的类的实例.

试试这个:

var MyComponent = React.createClass({
    render: function () {
        return React.DOM.div(null, this.props.data);
    }
});

var myComponent = React.renderComponent(
     new MyComponent({ data: someData }),
     document.getElementById('predictionContent')
);

myComponent.setProps({ data: someData2 });
Run Code Online (Sandbox Code Playgroud)

话虽如此,Chad Scira的回答也是正确的:重新渲染可能比调用setProp更好.这将使它看起来与render()方法中的代码相同,并且renderComponent无论是第一次还是后续更新,您始终都可以调用.

像这样:

var MyComponent = React.createClass({
    render: function () {
        return React.DOM.div(null, this.props.data);
    }
});

React.renderComponent(
     new MyComponent({ data: someData }),
     document.getElementById('predictionContent')
);

// later
React.renderComponent(
     new MyComponent({ data: someData2 }),
     document.getElementById('predictionContent')
);
Run Code Online (Sandbox Code Playgroud)


Cha*_*ira 9

你不应该这样做.而是像这样再次运行renderComponent方法:

React.renderComponent(
     myComponent({ data: someData2 }),
     document.getElementById('predictionContent')
);
Run Code Online (Sandbox Code Playgroud)

react会自动解决差异

  • @ 31415926参见[setProps docs](http://facebook.github.io/react/docs/component-api.html#setprops); 他们试图阻止它(有充分理由).它主要是早期反应版本的遗物. (2认同)