[解決済み] ReduxのmapToDispatchToProps()の引数で「dispatch」が関数でない件
2022-04-26 08:59:21
質問
私はjavascript/redux/reactの初心者で、redux, react-redux, & reactを使って小さなアプリケーションを作成しています。コネクト(react-reduxバインディング)と一緒にmapDispatchToProps関数を使用すると、結果のプロップを実行しようとすると、なぜかディスパッチが関数でないことを示すTypeErrorが表示されます。しかし、dispatchをpropとして呼び出すと(提供されたコードのsetAddr関数を参照)、それは動作します。
reduxのドキュメントにあるTODOアプリの例では、mapDispatchToPropsメソッドは同じようにセットアップされています。関数内で console.log(dispatch) を実行すると、dispatch はオブジェクト型であると表示されます。この方法で dispatch を使い続けることもできますが、redux をこれ以上続ける前に、なぜこのようなことが起こるのかを知っておいたほうがいいと思います。コンパイルには webpack と babel-loaders を使っています。
私のコード
import React, { PropTypes, Component } from 'react';
import { connect } from 'react-redux';
import { setAddresses } from '../actions.js';
import GeoCode from './geoCode.js';
import FlatButton from 'material-ui/lib/flat-button';
const Start = React.createClass({
propTypes: {
onSubmit: PropTypes.func.isRequired
},
setAddr: function(){
this.props.dispatch(
setAddresses({
pickup: this.refs.pickup.state.address,
dropoff: this.refs.dropoff.state.address
})
)
},
render: function() {
return (
<div>
<div className="row">
<div className="col-xs-6">
<GeoCode ref='pickup' />
</div>
<div className="col-xs-6">
<GeoCode ref='dropoff' />
</div>
</div>
<div className="row">
<div className="col-xs-6">
<FlatButton
label='Does Not Work'
onClick={this.props.onSubmit({
pickup: this.refs.pickup.state.address,
dropoff: this.refs.dropoff.state.address
})}
/>
</div>
<div className="col-xs-6">
<FlatButton
label='Works'
onClick={this.setAddr}
/>
</div>
</div>
</div>
);
}
})
const mapDispatchToProps = (dispatch) => {
return {
onSubmit: (data) => {
dispatch(setAddresses(data))
}
}
}
const StartContainer = connect(mapDispatchToProps)(Start)
export default StartContainer
乾杯
解決方法は?
を使用する場合
mapDispatchToProps
を使わずに
mapStateToProps
を使うだけです。
null
を第一引数に指定します。
export default connect(null, mapDispatchToProps)(Start)
関連
-
Vueの要素ツリーコントロールに破線を追加する説明
-
JSアレイループと効率解析の比較
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Reduxのアクションをタイムアウトでディスパッチする方法とは?
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
親子コンポーネント通信を解決する3つのVueスロット
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
Vueの要素ツリーコントロールに破線を追加する説明
-
vueの補間表現とv-textディレクティブの違いについて
-
[解決済み] テスト
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。