组成setState与Ramda作出反应

时间:2017-12-02 10:23:13

标签: javascript reactjs functional-programming

我正在使用Ramda构建一个反应应用程序。当页面加载时,我想加载一些数据并将其置于我的状态,所以它看起来像这样:

{
    "datasets": [foo, bar]
}

所以我使用了componentDidMount方法来实现这一点。

componentDidMount() {
    fetch('/api/dataset/')
        .then(res => res.json())
        .then(datasets => this.setState(R.assoc('datasets', datasets)))
}

这很有效,但后来我觉得我可以使用R.compose

使它更光滑
componentDidMount() {
    fetch('/api/dataset/')
        .then(res => res.json())
        .then(R.compose(this.setState, R.assoc('datasets')))
}

这不起作用,它给了我错误:

TypeError: Cannot read property 'enqueueSetState' of undefined
  at r.setState (ReactBaseClasses.js:62)
  at _pipe.js:3
  at _arity.js:14
  at <anonymous>

为什么会这样?它与“this”的绑定有关吗?

1 个答案:

答案 0 :(得分:2)

constructor方法

中执行此操作
constructor () {
  super();
  this.setState.bind(this);
}