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 方法作为参数传递。