React.js中setProps()方法被弃用了,有什么替代方案?

7

我刚将项目的React版本升级到13.3,setProps()不再起作用。 我在这个Mocha测试中使用它,但现在不知道该如何重写它。有什么替代方案吗?

it('reloads search results when props change ', function() {
    var loadResultsSpy = sinon.spy(searchView, 'loadSearchResults');
    var newProps = {searchBy: 'foo', searchTerm: 'bar'};
    searchView.setProps(newProps);
    expect(loadResultsSpy.calledWith(newProps.searchBy, newProps.searchTerm)).toBe(true);
  });
1个回答

6
在最一般的情况下,React建议只重新渲染顶层组件,这基本上只会在新的渲染是相同组件类型时更新props。由于TestUtils.renderIntoDocument仅仅是创建DOM节点并对其进行常规渲染的快捷方式,因此像这样做就可以了(我对测试设置做了一些假设):
var searchView, div;

beforeEach(function() {
  var comp = <SearchView searchBy="baz" searchTerm="quix" />;
  div = document.createElement('div');
  searchView = React.render(comp, div);
});

it('reloads search results when props change', function() {
  var loadResultsSpy = sinon.spy(searchView, 'loadSearchResults');
  var comp = <SearchView searchBy="foo" searchTerm="bar" />;
  React.render(comp, div);
  expect(loadResultsSpy.calledWith("foo", "bar")).toBe(true);
});

1
谢谢。在较新版本的React中,需要使用ReactDOM.render而不是React.render - Henrik N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接