メニューを生成するための単純なReactコンポーネントを作成しましたが、可視性トグルをStateの代わりにReduxに置き換えたいと考えました。React Redux - コンポーネントに変更が反映されていない
私のコンポーネントは次のようになります。
class SiteMenu extends React.Component {
constructor(props) {
super(props);
}
toggle(force = false) {
let active = !active;
store.dispatch({
type: 'TOGGLE',
active
});
}
render() {
const wrapperClass = this.props.active ? `${this.props.className}__wrapper ${this.props.className}__wrapper--active` : `${this.props.className}__wrapper`;
return (
<nav className={this.props.className} ref="nav">
<button className={`${this.props.className}__trigger`} onClick={this.toggle.bind(this)}>
{this.props.active}
</button>
<ul className={wrapperClass}>
</ul>
</nav>
);
}
}
私はmapStateToProps
を追加しました:
const mapStateToProps = (store) => {
return {
active: store.menuState.active
}
};
とconnect
connect(mapStateToProps)(SiteMenu);
マイストア:
import { createStore } from 'redux';
import reducers from './reducers/index.js';
const store = createStore(reducers, window.devToolsExtension && window.devToolsExtension());
export default store;
の
とレデューサー:私は私のReduxのデベロッパーツールをチェックすると
import { combineReducers } from 'redux';
import menuReducer from './menu-reducer';
const reducers = combineReducers({
menuState: menuReducer
});
export default reducers;
const initialMenuState = {
active: false
};
const menuReducer = (state = initialMenuState, action) => {
switch(action.type) {
case 'TOGGLE':
console.log(action);
return Object.assign({}, state, { active: action.active });
}
return state;
};
export default menuReducer;
、状態が変化しています。私は何をすべきか?レポで
コード:https://github.com/tomekbuszewski/react-redux
ありがとう、それはうまくいく;-)私はなぜラッパーが必要なのか分からない。 –
"接続"がストアに接続しているためです。そうしないと、mapStateToPropsにアクセスできなくなります。あなたが店舗からデータを取得しないでください –
btw、あなたは "ラップされた"コンポーネント名には必要ありません –