反应:我不能将参数传递给操作吗?

时间:2019-11-11 21:00:54

标签: javascript reactjs

请原谅我,如果我没有措辞这一权利。我现在正在学习React,在将参数传递给操作时遇到问题。这是动作:

export const getPosts = filterQs => {
    return dispatch => {
        const apiUrl = wpApi.listPosts;

        if (filterQs) {
            apiUrl += "?" + filterQs;
        }

        // Actually get the posts
        dispatch(getPostsStarted());

        axios.get(`${apiUrl}`)
            .then(response => {
                dispatch(getPostsSuccess(response.data));
            })
            .catch(error => {
                dispatch(getPostsFailure(error.message));
            });
    }
}

跳过包含条件 if(filterQs) 的条件,因为在分派操作时,它似乎实际上没有该参数。调度时它仍然返回成功的响应,只是不包括我需要的参数。

在这里我在组件中映射调度:

const mapDispatchToProps = {
    filterUpdate,
    getPosts
}

这是实际被调用的方法。

changeHandler (event) {
        const checkedStatus = event.currentTarget.checked;
        const selectedTaxonomy = event.currentTarget.name;
        const termId = event.currentTarget.value;

        const paramsToSend = {
            checkedStatus: checkedStatus,
            selectedTaxonomy: selectedTaxonomy,
            termId: termId
        };

        const filterUpdatePromise = new Promise((resolve, reject) => {
            this.props.filterUpdate(paramsToSend);
            resolve(true);
        });

        // Run the filter query string format function only after the props have updated
        filterUpdatePromise.then(() => {
            const filterQs = this.formatNewFilterQuery();
            getPosts(filterQs);
        });
    }

据我所知,正在执行getPosts(filterQs)。如果在操作中将filterQs记录在分派之外,则实际上我会在日志中看到我的参数值。我只是想不出为什么不能将参数传递给调度程序。

1 个答案:

答案 0 :(得分:2)

尝试从

更改mapDispatchToProps
const mapDispatchToProps = {
    filterUpdate,
    getPosts
}

const mapDispatchToProps = dispatch => {
    return {
        filterUpdate: (params) => dispatch(filterUpdate(params)),
        getPosts: (filters) => dispatch(getPosts(filters))
    }
};