Saya memiliki komponen React sederhana yang saya hubungkan (memetakan array / status sederhana). Untuk menghindari referensi konteks untuk toko, saya ingin cara untuk mendapatkan "pengiriman" langsung dari alat peraga. Saya telah melihat orang lain menggunakan pendekatan ini tetapi tidak memiliki akses ke ini karena beberapa alasan :)
Ini adalah versi dari setiap ketergantungan npm yang saya gunakan saat ini
"react": "0.14.3",
"react-redux": "^4.0.0",
"react-router": "1.0.1",
"redux": "^3.0.4",
"redux-thunk": "^1.0.2"
Berikut adalah metode komponen w / hubungkan
class Users extends React.Component {
render() {
const { people } = this.props;
return (
<div>
<div>{this.props.children}</div>
<button onClick={() => { this.props.dispatch({type: ActionTypes.ADD_USER, id: 4}); }}>Add User</button>
</div>
);
}
};
function mapStateToProps(state) {
return { people: state.people };
}
export default connect(mapStateToProps, {
fetchUsers
})(Users);
Jika Anda perlu melihat peredam (tidak ada yang menarik selain ini dia)
const initialState = {
people: []
};
export default function(state=initialState, action) {
if (action.type === ActionTypes.ADD_USER) {
let newPeople = state.people.concat([{id: action.id, name: 'wat'}]);
return {people: newPeople};
}
return state;
};
Jika Anda perlu melihat bagaimana router saya dikonfigurasi w / redux
const createStoreWithMiddleware = applyMiddleware(
thunk
)(createStore);
const store = createStoreWithMiddleware(reducers);
var Route = (
<Provider store={store}>
<Router history={createBrowserHistory()}>
{Routes}
</Router>
</Provider>
);
memperbarui
Sepertinya jika saya menghilangkan pengiriman saya sendiri di koneksi (saat ini di atas saya menunjukkan fetchUsers), saya akan mendapatkan pengiriman gratis (hanya tidak yakin apakah ini adalah cara penyiapan w / tindakan asinkron biasanya berfungsi). Apakah orang mencampur dan mencocokkan atau semuanya atau tidak sama sekali?
[mapDispatchToProps]
sumber
bindActionCreators(actionCreators, dispatch)
opsional? Saya perhatikan di kode Anda di// es7 spread syntax
telepon,dispatch
tidak diteruskan kebindActionCreators
function mapDispatchToProps(dispatch) { return { ...bindActionCreators({ increment, decrement }), dispatch }; }
Anda biasanya dapat mencampur dan mencocokkan berdasarkan apa yang Anda suka.
Anda dapat meneruskan
dispatch
sebagai properti jika itu yang Anda inginkan:Saya tidak yakin bagaimana
fetchUsers
digunakan (sebagai fungsi async?), Tetapi Anda biasanya akan menggunakan sesuatu sepertibindActionCreators
untuk auto-mengikat pengiriman dan kemudian Anda tidak perlu khawatir tentang menggunakandispatch
langsung dalam komponen terhubung.Menggunakan
dispatch
semacam direktori memasangkan komponen bodoh tanpa kewarganegaraan dengan redux. Yang membuatnya kurang portabel.sumber
fetchUsers
suntikan yang tidak terikat sebagai penyangga. Notasi pintasan hanya berfungsi saat Anda meneruskan objek sebagai argumen kedua. Ketika Anda melewati fungsi Anda harus memanggilbindActionCreators
diri sendiri:dispatch => ({ ...bindActionCreators({ fetchUsers }, dispatch), dispatch })
.dispatch => ( bindActionCreators({ dispatch, fetchUsers }, dispatch))
Meskipun Anda dapat
dispatch
diturunkan sebagai bagian daridispatchToProps
, saya akan merekomendasikan untuk menghindari mengaksesstore
ataudispatch
langsung dari dalam komponen Anda. Sepertinya Anda akan lebih baik dilayani dengan mengirimkan pembuat tindakan terikat dalam argumen ke-2 connectdispatchToProps
Lihat contoh yang saya posting di sini https://stackoverflow.com/a/34455431/2644281 tentang cara mewariskan "pembuat tindakan yang sudah terikat" dengan cara ini komponen Anda tidak perlu mengetahui secara langsung atau bergantung pada penyimpanan / pengiriman .
Maaf singkat. Saya akan memperbarui dengan info lebih lanjut.
sumber