最初に、私は2つのアプローチの間で変更している唯一のことはsetStateとReduxストアを経由することです。他のもの、つまりコンポーネントなどを変更しないでください。setStateは機能しますが、reduxストアの更新はありません
私はsetStateアプローチを使用するとモーダルを閉じることができますが、ストアを通過すると閉じません。どんな考え?ここで
は私の減速だ:ここで
import 'babel-polyfill';
import * as types from '../actions/actionTypes';
const initialState = {
modals: {
"modal1": { isDisplayed: true },
"modal2": { isDisplayed: false }
}
};
export default (state = initialState, action) => {
switch (action.type) {
case types.SET_IS_DISPLAYED_MODAL :
return Object.assign({}, state, {
modals: action.modals
})
default: return state
}
}
}
は、モーダルを閉じることになっている私のonClickアクションの2つのバージョンがあります。
これは、SETSTATEのバージョンであり、それが動作します:
displayModal(modalId, value)
{
let modals = this.props.modals;
modals[modalId].isDisplayed = value;
return setState({modals: modals});
}
そしてここでは、Reduxの店を通過し、それが私のモーダルを閉じないバージョンです。
displayModal(modalId, value)
{
let modals = this.props.modals;
modals[modalId].isDisplayed = value;
return this.props.actions.displayModal(modals);
}
あり、アクションに多くはないですが、ここにある:私は、ところで
render() {
return(
<div>
<div>Some info...</div>
{this.props.modals["modal1"].isDisplayed
? <Modal1 />
: null}
{this.props.modals["modal2"].isDisplayed
? <Modal2 />
: null}
</div>
);
}
:
export const displayModal = (modals) => {
return {
type: types.SET_IS_DISPLAYED_MODAL,
modals
};
}
あなたはそれが私のコンポーネントにどのように見えるかを確認するだけので、ここにあります私はアクションとレデューサーを打つことを知っている。また、私がmapStateToPropsにデバッガを置くと、モーダルの更新された状態でそれを打つことになることも知っています。だから私は、アクションとレデューサーの両方が、彼らが想定していることをやっていることを知っています。
更新: 私は何か試してみましたが、これで問題は解決しました。私はmapStateToPropsに最後の行を追加し、私のコンポーネントでセクションを更新:
function mapStateToProps(state) {
return {
modals: state.modals,
isModal1Displayed: state.modals["modal1"].isDisplayed // Just added this line
}
}
とする私のコンポーネントのコードを変更:まず、はReduxのリデューサに状態を変異させることはありません
render() {
return(
<div>
<div>Some info...</div>
{this.props.isModal1Displayed
? <Modal1 />
: null}
</div>
);
}
コンポーネントを接続しているコード部分を追加できますか? – diedu
元の投稿を更新しました。 this.props.modals ["modal1"]。isDisplayedをチェックする代わりに、mapStateToPropsに新しいpropを作成しました。私はmapStateToPropsで少しファンキーに見えますが、うまくいきます。なぜ初期のコードが失敗したのか? – Sam