私のコンポーネントにはチェックボックスがあります。私がそれらをクリックすると、redux状態で選択されたチェックボックスを保存し、選択されたチェックボックスがチェックされた状態で表示されるようにコンポーネントを更新します。 は、これが私のコンポーネントです:チェックボックス付きのReact/Reduxコンポーネントはチェックボックスをクリックしても更新されません
import React, {Component} from 'react';
import {connect} from 'react-redux';
import {selectIngredient} from '../actions';
class Ingredient extends Component {
constructor(props) {
super(props)
this.isSelected = this.isSelected.bind(this);
this.handleCheckbox = this.handleCheckbox.bind(this);
}
handleCheckbox(e) {
const value=e.target.value;
this.props.selectIngredient(value);
}
isSelected(id) {
return (this.props.selectedIngredients.indexOf(id) > -1)
}
render() {
return (
<div className="container">
<div className="form-check checkbox">
<label className="form-check-label">
<input checked={this.isSelected(1)}
className="form-check-input"
onClick={this.handleCheckbox}
type="checkbox" value="1" />
1
</label>
</div>
<div className="form-check checkbox">
<label className="form-check-label">
<input checked={this.isSelected(2)}
className="form-check-input"
onClick={this.handleCheckbox}
type="checkbox" value="2" />
2
</label>
</div>
<div className="form-check checkbox">
<label className="form-check-label">
<input checked={this.isSelected(3)}
className="form-check-input"
onClick={this.handleCheckbox}
type="checkbox" value="3" />
3
</label>
</div>
</div>
);
}
}
function mapStateToProps(state, ownProps){
const {selectedIngredients} = state;
return {selectedIngredients}
}
export default connect(mapStateToProps,{selectIngredient})(Ingredient);
そして、これは
import {SELECT_INGREDIENT} from "../constants";
export function selectIngredient(selected){
const action = {
type: SELECT_INGREDIENT,
selected
}
return action;
}
アクション/ index.jsであり、ここで減速です:私は、チェックボックスをクリックすると
import {SELECT_INGREDIENT} from "../constants";
export default (state={selectedIngredients:[]}, action)=>{
let stateBefore = Object.assign({},state);
switch(action.type){
case SELECT_INGREDIENT:
const {selected} = action;
stateBefore['selectedIngredients'].push(+selected);
return stateBefore
default:
return state;
}
}
は何も、変わらない彼ら空にしなさい。コンポーネントが更新されていません。しかし、還元状態はその状態を更新する。 還元状態が更新されているので、コンポーネントとそのチェックボックスを更新する必要があります。違いますか?
この作業を行う方法を理解してください。 {selectedIngredients、...状態:[... state.selectedIngredients、action.selected]}あなたの減速リターンで
:
以下のコメントで与えられた答えをありがとう
ありがとうございました。私は実際にはコンポーネントの状態のアプローチを使用していますが、現在はreduxに移動しようとしています – Jeremy
reduxの状態がコンポーネントとそのチェックボックスを更新する必要があると思いました。 – Jeremy
この問題で参照されているように状態を変更しないでください。https://github.com/reactjs/redux/issues/585 –