【发布时间】:2017-08-05 09:54:54
【问题描述】:
当实现像 Redux 或 MobX 这样的状态容器时,你的状态和事件通常被移动到一个单独的类或对象中,不再可以读取 refs。
例如,在普通组件中:
import Alert from Alert.js;
class Dummy extends React.Component {
constructor(props) {
super(props);
this.state = { clicked: false }
}
handleClick() {
fetch('api').then(function(){
this.setState({ clicked: true });
this._alert.show('Cool response!');
});
}
render() {
return (
<div>
<Alert ref={a => this._alert = a} />
<Button onClick={this.handleClick}/>
</div>
)
}
}
如果我点击按钮,一旦服务器请求完成,状态就会更新并触发警报。在一些 modal 和 alert 库中使用这样的 refs 是很常见的。
现在,在 Redux(或任何 Flux 实现)中,该 fetch() 将存在于一个动作中,该动作存在于一个单独的文件中,该文件无权访问 this._alert。
在不重写外部“警报”库的情况下维护功能的最佳方法是什么?
【问题讨论】:
-
在你的行动中你可以返回一个承诺 I.E. api 调用,您可以执行以下操作:
this.props.fetchSomething.then(() => this._alert.show('Cool response!')您只需要确保您在操作中返回了承诺。 -
返回一个 Promise 是个好主意,但是您需要使用一些中间件来让您的操作返回诸如
redux-promise-middleware或类似的承诺
标签: javascript reactjs redux flux