如何在 react.js 中使用 setProps

IT技术 reactjs
2021-05-07 21:57:18

我想setProps从外部调用myComponent以便能够动态更改myComponent.
我希望在更改组件的 props 后,它会重新渲染自己。

我正在尝试以下操作:

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});

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

如何解决这个问题?

2个回答

警告: 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 });

话虽如此,Chad Scira 的回答也是正确的:重新渲染可能比调用 setProps 更好。这将使其看起来与 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')
);

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

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

react会自动解决差异