Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在调用Reactjs上的setProps之前是否应该过滤数据?_Javascript_Reactjs - Fatal编程技术网

Javascript 在调用Reactjs上的setProps之前是否应该过滤数据?

Javascript 在调用Reactjs上的setProps之前是否应该过滤数据?,javascript,reactjs,Javascript,Reactjs,如果我在为Reactjs调用setProps(或setState)之前过滤数据,速度会更快吗 var component = React.renderComponent( <MainApp />, document.getElementById("container") ); var data = { name: "p", list: [ {id:1, name:""}, {id:2, name:""}, {id:3, name:""},

如果我在为Reactjs调用
setProps
(或
setState
)之前过滤数据,速度会更快吗

var component = React.renderComponent(
  <MainApp />,
  document.getElementById("container")
);

var data = {
  name: "p",
  list: [
    {id:1, name:""},
    {id:2, name:""},
    {id:3, name:""},
    //...
  ]
}
component.setProps(data);
data.name = "w";
或者这个:

component.setProps({name: "w"});
后者不需要我再次将整个数据对象放入其中,但我必须自己进行过滤

如果我再次放入整个对象,只改变了一件事,那么Reactjs是否需要在
setProps/setState
中处理整个对象,这会减慢它的速度,或者它是否需要处理
render
中的所有内容,这样就没有什么区别了


1小时后编辑:

我没有得到一个令人满意的技术答案,哪个更快

我没有追根究底,只是做了一个快速的jsPerf测试用例,看看哪一个更快,并简单地接受它作为统计事实而不是技术事实


令人惊讶的是,给它一个大的物体会更快,速度可以忽略不计。(我想会慢一些。)我想不管我的输入是小还是大,ReactJS都必须处理整个对象。它无法跳过处理大型对象(未修改),因此不将大型对象传递给它不会节省时间。

只传递需要更新的密钥会快一点点,但是,您应该传入任何最方便的内容——进行自己的筛选将抵消传递较少密钥可能获得的任何时间优势


正如我在中所说的,这些微小的变化不会产生足够大的差异,因此不必担心。做最简单的事情,然后只有当你的应用程序运行缓慢时,才考虑添加以减少不必要的更新。

假设我正在编写RSS阅读器。如果一个人单击一条消息,我加载该消息,如果我调用带有所有JSON的
setProps
,那么所有内容都将被
render
ed再次渲染,包括文件夹列表、提要列表(数千!)和当前打开的提要。Anusser:为了防止出现这种情况,您可以编写shouldComponentUpdate方法,而无需重新构造应用程序。如果你使用的是不可变的数据,这是非常容易的,不管怎样都很容易。但这听起来适得其反。这意味着在我的应用程序中,我必须修改除SingleMessage组件之外的所有其他组件的
shouldComponentUpdate
。这听起来不像React应该如何使用,听起来像是会产生意大利面条代码。换句话说,我写的是意大利面条式的代码或React应用程序设计成每当一件小事发生变化时就呈现整个应用程序。阿努塞:我想你会发现反应非常快。如果您的组件太慢,您可以稍后尝试加快它们,而不必重新构建应用程序。这是使用React的首选方式吗?i、 每次都渲染所有内容?我这样问是因为这与我使用其他语言的组件编程不同。除非框架特别鼓励您进行完全重新渲染,否则不赞成导致完全重新渲染。
component.setProps({name: "w"});