Meteor 流星1.3-道具更改时不触发渲染
我最近更新了meteor 1.3,createContainer函数有问题。当道具改变时,应用程序应该重新渲染,但是,它没有发生。我正在使用中的示例,但什么都没有发生,应用程序只显示标题。不存在任何错误Meteor 流星1.3-道具更改时不触发渲染,meteor,reactjs,meteor-react,Meteor,Reactjs,Meteor React,我最近更新了meteor 1.3,createContainer函数有问题。当道具改变时,应用程序应该重新渲染,但是,它没有发生。我正在使用中的示例,但什么都没有发生,应用程序只显示标题。不存在任何错误 import React, { Component, PropTypes } from 'react'; import { createContainer } from 'meteor/react-meteor-data'; import { Tasks } from '../api/tasks
import React, { Component, PropTypes } from 'react';
import { createContainer } from 'meteor/react-meteor-data';
import { Tasks } from '../api/tasks.js';
import Task from './Task.jsx';
class App extends Component {
renderTasks() {
return this.props.tasks.map((task) => (
<Task key={task._id} task={task} />
));
}
render() {
return (
<div className="container">
<header>
<h1>Header</h1>
</header>
<ul>
{this.renderTasks()}
</ul>
</div>
);
}
}
App.propTypes = {
tasks: PropTypes.array.isRequired,
};
export default createContainer(() => {
return {
tasks: Tasks.find({}).fetch(),
};
}, App);
我被困的时间比我愿意承认的要长,我还缺少什么?您的
renderTasks
方法不知道这是什么,因为React类不进行自动绑定。将组件修改为以下内容:
class App extends Component {
renderTasks() {
return this.props.tasks.map((task) => (
<Task key={task._id} task={task} />
));
}
render() {
return (
<div className="container">
<header>
<h1>Header</h1>
</header>
<ul>
{this.renderTasks.call(this)}
</ul>
</div>
);
}
}
这与代码无关,与我在迁移到Meteor 1.3时意外地将服务器代码放入客户端代码有关
但我不确定这为什么没有导致任何错误。它缺少React:
App.propTypes = {
tasks: PropTypes.array.isRequired,
};
到
我尝试了您的解决方案,但不幸的是,事实并非如此:(您尝试过任何
console.log
语句吗?请在render(){
:console.log(this.props.tasks)中放置一个语句)
,看看它会吐出什么。另外,为了在调试时保持简单,我现在将用一个
替换您的
。这很愚蠢,但在迁移过程中,我意外地将服务器代码放在了我的客户端文件夹中。我不确定为什么这不会导致任何错误,但这是导致此错误的原因。不是吗感谢您的帮助!这个答案是错误的:原始代码确实使用import
语句将PropTypes
引入范围。因此,这并不能回答问题。
import autoBind from 'react-autobind';
class App extends Component {
constructor(props) {
super(props);
autoBind(this);
}
// ...
}
App.propTypes = {
tasks: PropTypes.array.isRequired,
};
App.propTypes = {
tasks: React.PropTypes.array.isRequired,
};