调度外部组件

Posted

技术标签:

【中文标题】调度外部组件【英文标题】:Dispatch outside component 【发布时间】:2021-12-21 20:58:39 【问题描述】:

我想分派外部组件。我想使用此链接中的选项 2 [https://daveceddia.com/access-redux-store-outside-react/][1]。我的代码是这样的

const loginUser = async (data) => 
    return axios.get(url + "/sanctum/csrf-cookie").then(() => 
        axios.post(url + '/api/login', data)
            .then(res => 
                return res.data

            )
            .catch((err) => 
                console.log(err);

            )
    )

export const handleLogin = (data) => async (dispatch) => 
    console.log('test');
    try 
        const user = await loginUser(data);
        dispatch(actions.setUser(user));
     catch (err) 
        console.log(err);
    

进入我的组件

    const test = (e) => 
        e.preventDefault;
        handleLogin(email: 'test@test.pl', password: 'password')
    
    return (
        <div className="container">
            <h2>Login</h2>
            <form onSubmit=handleSubmit(test)>
//...

它没有完成代码,它可能包含错误,但目前对我来说最重要的是为什么这段代码不起作用,如果有时是错误的,为什么不显示任何错误。我认为问题出在 sync(dispatch) 中。在此示例中,我添加了 console.log 进行测试,但未显示。如果没有该功能,则显示 console.log。 Redux thunk 也被添加到 store 中

const store = createStore(allReducers, composeWithDevTools(applyMiddleware(thunk)))

【问题讨论】:

问题的标题具有误导性,您显然想从反应组件中调度。 【参考方案1】:

像这样导入存储和使用:

  store.dispatch(actions.setUser(user));

您可以通过以下方式从组件中获取状态:

store.getState().items

【讨论】:

我不想导入商店。我想使用我向 ib 展示我的帖子的这种方法。我用过,但在其他地方没有,我想知道为什么。 我在其他帖子中回答你。【参考方案2】:

您没有在组件和操作 js 中分派您的操作。 你可以通过 props 和 dispatch 调用组件中的动作,但我看不到 props,所以我使用 useDispatch 并在那里调用 handleLogin 动作。

在 action.js 文件中使用它:

 const user = await loginUser(data)(dispatch);

改为:

   const user = await loginUser(data);

然后在组件中:

   import useDispatch from "react-redux";
    

    const dispatch = useDispatch();
     const test = (e) => 
        e.preventDefault;
        dispatch(handleLogin(email: 'test@test.pl', password: 'password'))
    

【讨论】:

提交nothink工作后看看console.log等。 我编辑了我的答案,再检查一遍

以上是关于调度外部组件的主要内容,如果未能解决你的问题,请参考以下文章

在组件外部使用 redux 钩子来实现代码的可重用性

在python中进行多次调度的简单方法? (没有外部库或类构建?)

Tigase 外部组件作为单个 jar

openfire 外部组件如何处理存在和订阅?

从组件外部调用 Vue.js 组件方法

ejabberd 中的外部组件是不是有任何吞吐量限制?