私は、React、Redux、TypeScriptを一緒に使用するときの定型文の量を減らす方法を理解しようとしています。この場合はあなたができないかもしれないが、誰かがアイディアを持っているかどうかを見たいと思っていたかもしれません。React、Redux、およびTypeScriptを使用したmapDispatchToPropsの短縮方法はありますか?
私は現在、メニューの表示と非表示を交互に切り替えるアクションをディスパッチするコンポーネントを持っています。アクションはそれはそれのように感じている
export function toggleMenu(isActive: boolean): Dispatch<Action> {
return (dispatch: Dispatch<Action>) => {
dispatch({
isActive,
type: "TOGGLE_MENU",
});
};
}
として定義されて
import {Action, toggleMenu} from "../../actions/index";
interface IConnectedDispatch {
toggleMenu: (isActive: boolean) => Action;
}
class HeaderMenu extends React.Component<IOwnProps & IConnectedState & IConnectedDispatch, any> {
constructor(props: IOwnProps & IConnectedState & IConnectedDispatch) {
super(props);
this.toggleMenuState = this.toggleMenuState.bind(this);
}
public render() {
return (
<button className={buttonClass} onClick={this.props.toggleMenu(this.props.isActive)} type="button">
</button>
);
}
}
const mapDispatchToProps = (dispatch: redux.Dispatch<Store.All>): IConnectedDispatch => ({
toggleMenu: (isActive: boolean) => dispatch(toggleMenu(isActive))});
:これを行うには、私は私のクラスのようなもの(状態に関係省いコード、アクションのディスパッチに焦点を当てた)を定義しましたここで私の目標を達成するのに必要なコードの量を減らすことができるはずです。 React、Redux、TypeScriptの新機能であるが、私は正確にどのように見えているのか分からない。具体的には、アクション名toggleMenuを繰り返し記述することは非常に反復的です。たとえば、この部分の2回:
const mapDispatchToProps = (dispatch: redux.Dispatch<Store.All>): IConnectedDispatch => ({
toggleMenu: (isActive: boolean) => dispatch(toggleMenu(isActive))});
何かアドバイスありがとうございます。
素晴らしい!ありがとう@ニバ! – langkilde
@nibaこれにはどのように 'connect'を呼びますか? 'mapDispatchToProps'を' const mapDispatchToProps =(dispatch):IConnectedDispatch => {toggleMenu} 'と宣言しない限り、' connect'はタイプを正しく推論しません。 'export default ReactRedux.connect(mapStateToProps、mapDispatchToProps)(HeaderMenu);' ... – mikebridge
私は標準の 'connect'を使っていません。私は後で私のコンテナ定義に入れることができる 'mapStateToProps'と' mapDispatchToProps'から型を自動的に取り出す 'connect'の周りに私の特別なラッパーを持っています。とにかく、私は 'connect(state => state、{... actions})(Component); 'を実行しようとしましたが、問題はありません。あなたの接続はどんなタイプで正しく推論されませんか? – niba