カウンタ成分:
export const Counter = (props) => (
<div style={{ margin: '0 auto' }} >
<h2>Counter: {props.counter}</h2>
<button className='btn btn-default' onClick={props.double}>
Double (Async)
</button>
</div>
)
Counter.propTypes = {
counter : React.PropTypes.number.isRequired,
double : React.PropTypes.func.isRequired,
increment : React.PropTypes.func.isRequired
}
export default Counter
とコンテナコンポーネント:
import { connect } from 'react-redux'
import { increment, double } from '../modules/counter'
import Counter from '../components/Counter'
const mapDispatchToProps = {
increment :() => increment(1),
double:() => double()
}
const mapStateToProps = (state) => {
return {
counter : state.counter
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Counter)
アクション:
export const COUNTER_INCREMENT = 'COUNTER_INCREMENT'
export const COUNTER_DOUBLE = 'COUNTER_DOUBLE'
// ------------------------------------
// Actions
// ------------------------------------
export const increment = (value = 1) => {
return {
type: COUNTER_INCREMENT,
payload: value
}
}
export const double = (value = 0) => {
return {
type: COUNTER_DOUBLE,
payload: value
}
}
const doubleAsync = (state) => {
return (dispatch, getState) => {
return new Promise((resolve) => {
setTimeout(() => {
dispatch(increment(state))
resolve()
}, 200)
})
}
}
export const actions = {
increment,
double
}
const ACTION_HANDLERS = {
[COUNTER_INCREMENT]: function (state, action) {
return state + action.payload
},
[COUNTER_DOUBLE]: (state, action) => {
return doubleAsync()
}
}
}
そして減速:
const initialState = 0
export default function counterReducer(state = initialState, action) {
const handler = ACTION_HANDLERS[action.type]
return handler ? handler(state, action) : state
}
ただし、COUNTER_DOUBLE
アクションハンドラはビューを更新していないようで、何も表示されません。
警告:失敗した小道具のタイプ:
Counter
に供給タイプfunction
の無効な小道具counter
、number
を期待私はこの警告が表示されます。
数字propType
を定義しており、約束関数を返すとこのエラーが発生することがわかりました。私はmapDispatchToProps
を修正して、実行された約束関数を無駄に戻そうとしました。私は間違って何をしていますか?
私はここで検索したコンセンサスがすぐに実行された機能との約束をラップするReduxの-サンクを使用することのようですが、私は困難これが動作するようになってを抱えています。
助けていただけたら幸いです!
:
この
は変更です。トリックは、約束が完了したときに別のアクションを引き起こすことです。約束は州に保存すべきではありません。すべての非同期アクションに対して3つのアクション(「保留中」、「成功」、「エラー」)をトリガーするミドルウェアを作成することは良いことです。データまたはエラーのいずれかを格納する汎用リデューサを作成することもできます。 – Sulthan