Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
Reactjs Meteor createContainer是否在注入的参数更改时重新计算?_Reactjs_Meteor - Fatal编程技术网

Reactjs Meteor createContainer是否在注入的参数更改时重新计算?

Reactjs Meteor createContainer是否在注入的参数更改时重新计算?,reactjs,meteor,Reactjs,Meteor,我有一个Meteor/React应用程序,正在使用MeteorcreateContainercontainer方法从Mongo收集数据,并将结果传递给子组件。我发现,当任何参数更改时,Mongo查询将重新计算(即使参数不会影响Mongo查询本身),并将道具发送到子组件上,从而导致其无法重新渲染。这是createContainer应该采用的工作方式,还是只在查询返回的数据发生更改时发送道具 export default MyComponentContainer = createContainer(

我有一个Meteor/React应用程序,正在使用Meteor
createContainer
container方法从Mongo收集数据,并将结果传递给子组件。我发现,当任何
参数更改时,Mongo查询将重新计算(即使参数不会影响Mongo查询本身),并将道具发送到子组件上,从而导致其无法重新渲染。这是
createContainer
应该采用的工作方式,还是只在查询返回的数据发生更改时发送道具

export default MyComponentContainer = createContainer(( params ) => {

    // Some Mongo queries...
    var query results = MyColl.find({}).fetch();

    return {
        query results  
    };

}, MyComponent);

是的,当
params
更改时,它将重新计算,其包装的组件将重新渲染,因为
params
将被传递到
MyComponent
,而React将重新渲染
MyComponent
,因为其道具已更改

如果您的
结果
是一个大数组,并且您不想重新渲染
结果
,我建议您在
MyComponent
中使用另一个子组件来渲染
结果

const ResultComponent = (props) => props.results.map(...);

const MyComponent = (props) => ({
  <div>
    <ResultComponent results={props.results} />
  </div>
});
constresultcomponent=(props)=>props.results.map(…);
常量MyComponent=(道具)=>({
});

这样一来,
ResultComponent
只会在
结果
更改时重新渲染

要添加到这一点,您还可以使用来防止
MyComponent
在不需要的情况下重新渲染。一般来说,在React中,如果五分之一的道具更改,这是否会导致此组件中的所有位置,在使用这五个道具的地方,更新它们的值?如果你的组件没有子组件,当其中一个道具发生变化时,组件内部的所有内容都将重新渲染。你会说这与你期望的反应方式相反,即它知道某个道具没有发生变化,因此不更新它,或者是整个组成部分?