#reactjs #react-redux #redux-saga
#reactjs #react-redux #redux-сага
Вопрос:
у меня реализован тег выбора со значением и onChange, onChange запускает действие redux и обновляет состояние, которое используется в параметрах тега выбора (поэтому компонент обновляется по мере обновления состояния)
Я попытался обновить состояние в обычном режиме и с помощью функции обратного вызова.Это не помогает
import React from "react";
import { connect } from "react-redux";
export class SelectDestination extends React.Component {
constructor(props)
{
super(props);
this.state={defaultval:''}
}
onSelectChange = event => {
let val=event.target.value
this.setState({defaultval:event.target.value},function(){this.props.onSelectChange(val)})
};
render() {
let options = this.props.state.planets.filter((x)=>this.props.state.vistedDestinatons.indexOf(x.name)===-1);
console.log(options)
return (
<React.Fragment>
{
<select value={this.state.defaultval} onChange={this.onSelectChange} name="onselect">
{options.map(x => (
<option value={x.name.toString()}>{x.name}</option>
))}
</select>
}
</React.Fragment>
);
}
}
const mapStateToProps = state => {
return {
state: state
};
};
const mapDispatchToProps = dispatch => {
return {
onSelectChange: payLoad =>
dispatch({ type: "SELCT_CHNG", payload: payLoad })
};
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(SelectDestination);
Я ожидаю, что это состояние должно быть отражено в теге выбора. При открытии в react-dev-tools я вижу обновление состояния.
Ответ №1:
Это связано с тем, что .setState
это асинхронная функция. Подробнее об этом можно прочитать здесь . Обычно это означает, что вы должны либо приводить к обратным вызовам, либо к обещаниям.