[解決済み] ReduxでmapStateToPropsを使わずにmapDispatchToPropsを使うことはできますか?
質問
Reduxのtodoの例を分解して、理解しようとしているところです。私は次のように読みました。
mapDispatchToProps
を使うとディスパッチアクションをpropsとしてマッピングできると書いてあったので
addTodo.js
を dispatch(addTodo()) を呼ぶ代わりに mapDispatchToProps を使うように書き換えることを考えました。私はそれを
addingTodo()
. このようなものです。
import React from 'react';
import {connect} from 'react-redux';
import addTodo from '../actions';
let AddTodo = ({addingTodo}) => {
let input;
return (
<div>
<form onSubmit={e => {
e.preventDefault()
if (!input.value.trim()) {
return
}
addingTodo(input.value)
input.value = ""
}}>
<input ref={node => {
input = node
}} />
<button type="submit">Submit</button>
</form>
</div>
)
}
const mapDispatchToProps = {
addingTodo: addTodo
}
AddTodo = connect(
mapDispatchToProps
)(AddTodo)
export default AddTodo
しかし、アプリを実行すると、このようなエラーが発生します。
Error: Invalid value of type object for mapStateToProps argument when connecting component AddTodo.
. 私は決して
mapStateToProps
を使ったことがなかったので、何が悪いのかよくわかりませんでした。私の直感では
connect()
は
mapStateToProps
の前に
mapDispatchToProps
.
作業用のオリジナルはこのようになります。
import React from 'react';
import {connect} from 'react-redux';
import addTodo from '../actions';
let AddTodo = ({dispatch}) => {
let input;
return (
<div>
<form onSubmit={e => {
e.preventDefault()
if (!input.value.trim()) {
return
}
dispatch(addTodo(input.value))
input.value = ""
}}>
<input ref={node => {
input = node
}} />
<button type="submit">Submit</button>
</form>
</div>
)
}
AddTodo = connect()(AddTodo)
export default AddTodo
完全なレポはこちら ここで .
そこで私の質問は、mapStateToPropsなしでmapDispatchToPropsを行うことが可能かどうかということです。私がやろうとしていることは、許容できるプラクティスなのでしょうか、もしそうでなければ、なぜそうしないのでしょうか?
どのように解決するのですか?
はい、できます。ただ
null
を第一引数として渡すだけです。
AddTodo = connect(
null,
mapDispatchToProps
)(AddTodo)
そうです、これは単に許容範囲というだけでなく、アクションを引き起こすための推奨される方法なのです。使用方法
mapDispatchToProps
を使うことで、reactコンポーネント内でreduxを使用していることを隠すことができます。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] オブジェクトが配列であるかどうかを確認するにはどうすればよいですか?[重複]。
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] Reduxのアクションをタイムアウトでディスパッチする方法とは?
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScript で範囲を作成する - 奇妙な構文
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる