使用async react-select与redux-saga

Met*_*ann 10 react-select redux redux-saga

我尝试实现异步react-select(Select.Async).问题是,我们想在redux-saga中进行提取.因此,如果用户键入内容,则应触发获取操作.然后佐贺取出记录并将它们保存到商店.这项工作到目前为止.不幸的是,loadOptions必须返回一个promise或者应该调用回调.由于新检索的选项通过更改属性进行传播,因此我看不到将Select.Async与saga一起使用来执行异步提取调用.有什么建议?

 <Select.Async
   multi={false}
   value={this.props.value}
   onChange={this.onChange}
   loadOptions={(searchTerm) =>  this.props.options.load(searchTerm)}
  />
Run Code Online (Sandbox Code Playgroud)

我有一个hack,我将回调分配给一个类变量并在componentWillReceiveProps上解析它.那样丑陋,不能正常工作,所以我寻找更好的解决方案.

谢谢

Ale*_*lex 14

redux-saga用于处理副作用,如异步接收选项react-select.这就是为什么你应该留下异步的东西redux-saga.我从未使用过react-select,只需查看文档,我就会这样解决:

您的组件变得非常简单.刚刚获得valueoptions从你的终极版商店.optionsRequested是动作的动作创建者OPTIONS_REQUESTED:

const ConnectedSelect = ({ value, options, optionsRequested }) => (
  <Select
    value={value}
    options={options}
    onInputChange={optionsRequested}
  />
)

export default connect(store => ({
  value: selectors.getValue(store),
  options: selectors.getOptions(store),
}), {
  optionsRequested: actions.optionsRequested,
})(ConnectedSelect)
Run Code Online (Sandbox Code Playgroud)

一个传奇定义OPTIONS_REQUESTED监视由其触发的操作,从服务器onInputChange加载数据searchTerm并调度OPTIONS_RECEIVED操作以更新redux存储.

function* watchLoadOptions(searchTerm) {
  const options = yield call(api.getOptions, searchTerm)
  yield put(optionsReceived(options))
}
Run Code Online (Sandbox Code Playgroud)

换句话说:让你的Component尽可能纯净并处理所有副作用/异步调用 redux-saga

我希望这个答案对你有用.