react plus bootstrap async redux redux-saga react-select

plus - Usa async react-select con redux-saga



react-select async (1)

redux-saga es para manejar efectos secundarios, como la recepción asíncrona de opciones para la selección de react-select . Es por eso que debes dejar las cosas asincrónicas para redux-saga . Nunca utilicé react-select pero con solo mirar la documentación lo resolvería de esta manera:

Tu componente se vuelve muy simple. Solo obtenga value y options de su tienda redux. optionsRequested es un creador de acciones para la acción 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)

Una definición de saga observa la acción OPTIONS_REQUESTED que se activa mediante onInputChange , carga los datos con el searchTerm de searchTerm del servidor y distribuye la acción OPTIONS_RECEIVED para actualizar la tienda redux.

function* watchLoadOptions(searchTerm) { const options = yield call(api.getOptions, searchTerm) yield put(optionsReceived(options)) }

En otras palabras: haz que tu Componente sea lo más puro posible y maneja todas las llamadas de efecto secundario / asincrónicas en redux-saga

Espero que esta respuesta sea útil para ti.

Intento implementar una selección de reacción asíncrona ( Select.Async ). El problema es que queremos hacer la búsqueda en redux-saga. Entonces, si un usuario escribe algo, se debe activar la acción de búsqueda. Saga luego busca el registro y los guarda en la tienda. Esto funciona hasta ahora. Lamentablemente, loadOptions tiene que devolver una promesa o se debe llamar a la devolución de llamada. Como las opciones recién recuperadas se propagan con una propiedad cambiante, no veo forma de usar Select.Async junto con saga para hacer la llamada asincrónica. ¿Alguna sugerencia?

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

Tuve un truco donde asigné la devolución de llamada a una variable de clase y lo resolví en componentWillReceiveProps. De esa manera feo y no funcionó correctamente, así que busco una mejor solución.

Gracias