আমি আরও একটি বিকল্প প্রস্তাব দিতে চাই যা আমি সবচেয়ে পরিষ্কার খুঁজে পেয়েছি তবে এর জন্য প্রয়োজন react-redux
বা কিছু কিছু সিমুলার - এছাড়াও আমি কয়েকটি অন্যান্য অভিনব বৈশিষ্ট্যগুলি ব্যবহার করছি:
// actions.js
export const someAction = (items) => ({
type: 'SOME_ACTION',
payload: {items},
});
// Component.jsx
import {connect} from "react-redux";
const Component = ({boundSomeAction}) => (<div
onClick={boundSomeAction}
/>);
const mapState = ({otherReducer: {items}}) => ({
items,
});
const mapDispatch = (dispatch) => bindActionCreators({
someAction,
}, dispatch);
const mergeProps = (mappedState, mappedDispatches) => {
// you can only use what gets returned here, so you dont have access to `items` and
// `someAction` anymore
return {
boundSomeAction: () => mappedDispatches.someAction(mappedState.items),
}
});
export const ConnectedComponent = connect(mapState, mapDispatch, mergeProps)(Component);
// (with other mapped state or dispatches) Component.jsx
import {connect} from "react-redux";
const Component = ({boundSomeAction, otherAction, otherMappedState}) => (<div
onClick={boundSomeAction}
onSomeOtherEvent={otherAction}
>
{JSON.stringify(otherMappedState)}
</div>);
const mapState = ({otherReducer: {items}, otherMappedState}) => ({
items,
otherMappedState,
});
const mapDispatch = (dispatch) => bindActionCreators({
someAction,
otherAction,
}, dispatch);
const mergeProps = (mappedState, mappedDispatches) => {
const {items, ...remainingMappedState} = mappedState;
const {someAction, ...remainingMappedDispatch} = mappedDispatch;
// you can only use what gets returned here, so you dont have access to `items` and
// `someAction` anymore
return {
boundSomeAction: () => someAction(items),
...remainingMappedState,
...remainingMappedDispatch,
}
});
export const ConnectedComponent = connect(mapState, mapDispatch, mergeProps)(Component);
আপনি এই পুনরায় ব্যবহার করতে চান, আপনি নির্দিষ্ট বের করে আনতে হবে mapState
, mapDispatch
এবং mergeProps
ফাংশন মধ্যে অন্যত্র পুনরায় ব্যবহার করার জন্য, কিন্তু এই অতি সুস্পষ্ট নির্ভরতা।