如何使用thunk根据redux状态有条件地显示小吃店?

时间:2018-11-25 21:24:11

标签: javascript reactjs design-patterns redux

我正在编写一个可在React中显示有关移动应用程序信息的网站,并且我正在使用Redux来存储有关当前应用程序的信息。我在标题中有一个输入文本字段,用户可以在其中输入一些应用程序ID,如果它是有效ID,他们将被重定向到另一页,如果ID无效,则会显示snackbar消息,如果用户只是点击输入,则还将显示一条小吃栏,并带有相应的消息。 AppNotFound是包装快餐条的组件。

我正在使用redux thunk调度一个操作,该操作检查onKeyDown方法(getAppInfo)内的应用程序id是否有效(它是一个异步函数)。理想情况下,我想从onKeyDown方法中的redux中得到结果。但是因为动作是异步发送的,所以我不能。

因此,我想让render根据found属性的值(无论是否找到应用程序)显示一个小吃栏。因此起初found将是undefined,因为异步分派不会在render中返回结果,但是found会变成true或{{ 1}},然后我们可以显示小吃栏。由于道具已更改,渲染将第二次自动调用。但这不会发生。

就模式而言,实现我想要的正确方法是什么?我不想使用false,因为它已被弃用。

这是我的代码:

componentWillReceiveProps

1 个答案:

答案 0 :(得分:0)

由于仍然没有人没有回答这个问题,因此我将提供最近到达的解决方案。

本质上,问题在于AppSearchBarInput的显示主要取决于是否找到了该应用程序。此操作必须是异步的,因为该信息来自Web API。因此,我正在使用redux-thunk,并且正在通过道具接收移动应用信息。但是snackbarOpen属性处于状态,这是一个问题,因为小吃栏取决于状态属性,而状态属性本身取决于异步接收的道具。

解决困境的方法是也将snackbarOpen移到道具上。因此,现在,如果找不到该应用,则应从snackbarOpen thunk直接调度将true设置为getAppInfo的操作,如果该应用为空白,则应从onKeyDown直接调度。另一方面,应从snackbarOpen分派将handleCloseSnackBar设置为false的操作。