Redux / 从动作调用调度
Redux / Calling dispatch from an action
如何在不从初始调用传递操作的情况下从操作内部分派操作?我只想删除 props.dispatch
但我无法让它工作。
已经在使用 redux-thunk,我是新来的。我的版本可以,但我猜它不是最好的。
<Files
onDrop={file => {
props.dispatch(addFile(props.dispatch, {id: uuidv4(), file}));
}}
/>
actions.js:
// addFile
export function addFile(
dispatch,
{
id = uuidv4(),
file = [],
} = {}
) {
doSomething(dispatch, id);
return {
type: 'ADD_FILE',
payload: {
id,
file,
},
};
}
// doSomething
function doSomething(dispatch, id) {
dispatch(callOtherAction(id));
}
您可以使用 mapDispatchToProps
并将其作为第二个参数传递给连接方法。
然后你将拥有 dispatch 方法和你的道具。
应该看起来像这样:
const mapDispathToProps = dispatch => ({
addFileAction: (file) => addFile(dispatch, file)
})
export default connect(null, mapDispathToProps)(Component);
您的 addFile 操作现在也可以将调度传递给其他操作。
如果您使用的是 redux-thunk
,那么您的操作可能如下所示:
// actions.js
export function addFile(id = uuidv4(), file = []) {
return dispatch => {
dispatch(doSomething(id));
dispatch({
type: 'ADD_FILE',
payload: {
id,
file,
},
});
}
}
function doSomething(id) {
return dispatch => {
dispatch(callOtherAction(id));
}
}
// component.js
import { addFile } from './actions.js';
const YourComponent = ({ addFile }) => <button onClick={() => addFile(id, file)}>Add File</button>;
export default connect(null, { addFile })(YourComponent)
不需要将 dispatch
方法作为参数传递。
如何在不从初始调用传递操作的情况下从操作内部分派操作?我只想删除 props.dispatch
但我无法让它工作。
已经在使用 redux-thunk,我是新来的。我的版本可以,但我猜它不是最好的。
<Files
onDrop={file => {
props.dispatch(addFile(props.dispatch, {id: uuidv4(), file}));
}}
/>
actions.js:
// addFile
export function addFile(
dispatch,
{
id = uuidv4(),
file = [],
} = {}
) {
doSomething(dispatch, id);
return {
type: 'ADD_FILE',
payload: {
id,
file,
},
};
}
// doSomething
function doSomething(dispatch, id) {
dispatch(callOtherAction(id));
}
您可以使用 mapDispatchToProps
并将其作为第二个参数传递给连接方法。
然后你将拥有 dispatch 方法和你的道具。
应该看起来像这样:
const mapDispathToProps = dispatch => ({
addFileAction: (file) => addFile(dispatch, file)
})
export default connect(null, mapDispathToProps)(Component);
您的 addFile 操作现在也可以将调度传递给其他操作。
如果您使用的是 redux-thunk
,那么您的操作可能如下所示:
// actions.js
export function addFile(id = uuidv4(), file = []) {
return dispatch => {
dispatch(doSomething(id));
dispatch({
type: 'ADD_FILE',
payload: {
id,
file,
},
});
}
}
function doSomething(id) {
return dispatch => {
dispatch(callOtherAction(id));
}
}
// component.js
import { addFile } from './actions.js';
const YourComponent = ({ addFile }) => <button onClick={() => addFile(id, file)}>Add File</button>;
export default connect(null, { addFile })(YourComponent)
不需要将 dispatch
方法作为参数传递。