質問
パラメータの順序を定義する API によって呼び出される ES7 関数を作成しています。
mapStateToProps(state, [ownProps]): stateProps
使用する必要がありますが、使用ownProps
しませんstate
。最初のパラメーターが指定されていないか、読み取りまたは書き込みを試行するとエラー (「フェイル ファスト」) が発生するように関数定義を作成することはできますか?
これは機能しません
これは魅力的に見えますが、もちろん_
有効な変数名です...:
function myMapStateToProps(_, ownProps) {
// ...
}
もう少しコンテキスト
私の質問は、実際にはSkipping optional function parameters in JavaScriptのミラーです。
私の質問の文脈は、クリックされたときに何かをするボタンを実装するReactコンポーネントのペアを書いているということです。
内側のコンポーネントはボタン テキストを含むレイアウトを指定し、外側のコンポーネントはモーダルを表示し、react-redux のconnect関数を使用して内側のコンポーネントで構成されます。
function MyButton({ handleOpen }) {
return (
<Button onClick={handleOpen} className={s['cta-button']}>
Button text that I want to configure
</Button>
);
}
const mapStateToProps = () => {
return {};
};
const mapDispatchToProps = (dispatch) => {
return {
handleOpen: () => dispatch(doSomeStuff()),
};
};
const MyButtonContainer = connect(
mapStateToProps,
mapDispatchToProps,
)(MyButton);
export default MyButtonContainer;
使用法は次のとおりです。
<MyButtonContainer />
私がやりたいことは、MyButtonContainer に渡されるプロパティを介して、ボタンに表示されるテキストを構成可能にすることです。
<MyButtonContainer text="Click me" />
状態を props ( ) にマップするために使用される関数の 2 番目のパラメーターを使用することでownProps
、プロパティにアクセスできますがtext
、状態からは何も必要ないので、わかりやすくするため、およびバグが発生する可能性を減らすために、mapStateToProps を記述します。最初のパラメーターが使用できないように機能します。
私はES7からトランスパイルしているので、標準のESは問題ありません。提案された拡張機能があれば、それらも使用できるかもしれません (webpack に感謝します)。
あるいは、React でこれを行うためのより良い方法があれば、その解決策も受け入れます。
ボタンのテキストを redux ストアに入れてみませんか?
これは技術的なオプションです。私はいくつかの理由でそれが好きではありません: - ボタン テキストは内部コンポーネントのプロパティです。HOC を使用してラップし、ボタン機能を提供していない場合は、プロパティとして直接指定するだけです。 redux ストアでは、多くのコーディング オーバーヘッドが発生します。レデューサー、ストア イニシャライザー、アクション クリエーターを作成する場合、より適切で簡単な方法が必要です。- 同じレンダリングされたページに複数のボタンをそれぞれ異なるテキストで表示したい - コンテナ クラスでプロパティを指定する必要があるとしても、それを表示するテキストにするのが最もきれいに見える