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
Meteor 流星1.3-道具更改时不触发渲染_Meteor_Reactjs_Meteor React - Fatal编程技术网

Meteor 流星1.3-道具更改时不触发渲染

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

我最近更新了meteor 1.3,createContainer函数有问题。当道具改变时,应用程序应该重新渲染,但是,它没有发生。我正在使用中的示例,但什么都没有发生,应用程序只显示标题。不存在任何错误

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