Я пытаюсь включить кнопку отправки, когда я нажимаю флажок и редактирую этот существующий компонент, чтобы использовать избыточность (я понимаю, что это не здорово, я просто пытаюсь заставить работать одну часть перед рефакторингом). На данный момент кнопки нет на странице.
class Survey extends Component {
state = {
questionsList: [
{
key: 'q1',
checked: this.props.survey && this.props.survey.includes('q1'),
},
{
key: 'q2',
checked: this.props.survey && this.props.survey.includes('q2'),
}
],
};
handleChange = (e) => {
const questions = JSON.parse(JSON.stringify(this.state.questionsList));
// Filter the question for the checkbox user interacted with.
const question = questions.find(q => q.key === e.target.name);
question.checked = !question.checked; // toggle
this.props.setEnableSubmit(questions.some(q => q.checked)); // dispatches a redux action (defined in mapDispatchToProps)
this.setState({ questionsList: questions });
}
render() {
return this.state.questionsList.map(question => (
<Checkbox name={question.key} onChange={this.handleChange} />
));
}
}
const mapStateToProps = (state, ownProps) => ({
survey: state.users[ownProps.match.params.userTarget].survey,
});
const mapDispatchToProps = (dispatch, ownProps) => ({
setEnableSubmit: (value) => {
dispatch(update(ownProps.match.params.userTarget, { enableSubmit: value }));
}
});
export default compose(
withRouter,
connect(
mapStateToProps,
mapDispatchToProps,
),
)(Survey);
Я пытаюсь сохранить отключенную / включенную кнопку в магазине, сохраняя все изменения в локальном состоянии (и сохраняя только в хранилище редуксов по нажатию кнопки)
по какой-либо причине, когда enableSubmit
происходит, при повторном рендеринге fn this.state.questionsList
больше не имеет обновленного questionsList
(поэтому я не могу установить флажки ). Однако это работает, если я удалю диспетчерский вызов. Он имеет такое же поведение, если setState не существует.
Он попадает в setState без исключения. Он обновляет enableSubmit в хранилище с переданным значением. Кажется, не имеет значения, какая строка вызывается первой или последней, или если в cb отправке или отправке находится cb to setState (пробовал все варианты)