javascript – 如何处理要从子组件状态的流星数据?

前端之家收集整理的这篇文章主要介绍了javascript – 如何处理要从子组件状态的流星数据?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Meteor 1.3中切换一些代码到ES6 React语法.组件需要获取Meteor数据,所以我使用一个createComponent来替换getMeteorData().问题是,旧的getMeteorData使用了组件的状态,该组件不被createContainer组件访问.

代码

Component = React.createClass({
   mixins: [ReactMeteorData],getMeteorData() {
    var mo = this.state.currentMonth;
    var start = newDate(moment(mo).startOf('month'));
    return {
     events:     collections.events.find({
        $or:       qwry,startDate: { $gte: start },endDate:   { $lte: end }
      }).fetch(),}
  },render() {
   ...
  }
});

如此远的新代码

class Component = React.Component {
 constructor(props) {
  super(props);
 }
 render() {
  ...
 }
}

export default createContainer(({params}) => {
var mo = this.state.currentMonth;
        var start = newDate(moment(mo).startOf('month'));
        return {
         events:     collections.events.find({
            $or:       qwry,endDate:   { $lte: end }
          }).fetch(),}
},Component);

获取错误“无法获取当前未定义的”,因为它尝试访问状态.有什么建议么?

解决方法

您可以将旧组件拆分为两个部分组件:一个保存状态并处理事件的组件,以及仅显示结果的纯组件.确保将事件处理程序作为回调传递给子组件.还要注意,父组件如何使用createContainer()函数的返回值.
// Parent component,setState should go here
export default class StateHolder extends React.Component {
  constructor(params) {
    super(params);
    this.state = {myKey: 1};
  }

  incrementKey() {
    this.setState({myKey: this.state.myKey + 1});
  }

  render() {
    return <Container myKey={this.state.myKey} onClick={this.incrementKey.bind(this)} />;
  }
}

// Child component,renders only
class PureComponent extends React.Component {
  render() {
    return <div>
      {this.props.myValue}
      <button onClick={this.props.onClick}>click me</button>
    </div>;
  }
}

// Decorated child container. 
// Make sure to use this one in parent component's render() function!
let Container = createContainer((props) => {
  let doc = MyCollection.findOne({someKey: props.myKey});
  return {
    myValue: doc ? doc.someValue : null
  }
},PureComponent);
原文链接:https://www.f2er.com/js/152366.html

猜你在找的JavaScript相关文章