Reactjs 在React组件中使用redux操作类型
假设我有以下代码:Reactjs 在React组件中使用redux操作类型,reactjs,redux,react-redux,Reactjs,Redux,React Redux,假设我有以下代码: switch (action.type) { case "GET_LIST": // update state break; case "GET_LIST_SUCCESS": // update state break; case "GET_LIST_ERROR": // update state break; default: re
switch (action.type) {
case "GET_LIST":
// update state
break;
case "GET_LIST_SUCCESS":
// update state
break;
case "GET_LIST_ERROR":
// update state
break;
default:
return state;
}
在此之前,我已经设置了一些动作创建者(使用thunk中间件处理异步请求)。因此,流程可能是GET\u LIST>GET\u LIST\u SUCCESS
或GET\u LIST>GET\u LIST\u ERROR
现在在我的React组件中,我想根据最终调度的操作类型(成功或错误)来执行一些操作
使用动作类型本身是一种好的做法,还是我应该只针对我的条件使用存储状态?在这个例子中,我的商店将有一个error
属性,我可以用它来检测是否有错误
所以它是(使用动作类型):
或(使用存储状态)
这是一个更好的实践,为什么?我的观点是,使用Redux比以组件状态存储数据的优势在于,您将如何处理数据更新的问题从视图层(React)分离到Redux;React组件应该只知道数据是否已更改,而不知道它是如何更改的。这将使前端中的数据层和视图层解耦,在需要执行一系列操作以更新状态(例如,从API获取)时非常有用 如果您想将当前Redux操作类型公开给React组件,您必须在应用程序中的某个位置记录该操作,因为我认为Redux不会将当前操作公开给view层。此外,这也暴露了太多关于Redux如何处理数据流的信息
通常的做法是以布尔值和错误日志形式保存抓取状态,例如,
isFetching
和fetchListError
,在抓取过程中更新这些值,并将这些值传递给查看层进行显示 这只是我的观点,但使用Redux比以组件状态存储数据的一个优点是,您可以将如何处理数据更新的问题从视图层(React)分离到Redux;React组件应该只知道数据是否已更改,而不知道它是如何更改的。这将使前端中的数据层和视图层解耦,在需要执行一系列操作以更新状态(例如,从API获取)时非常有用
如果您想将当前Redux操作类型公开给React组件,您必须在应用程序中的某个位置记录该操作,因为我认为Redux不会将当前操作公开给view层。此外,这也暴露了太多关于Redux如何处理数据流的信息
通常的做法是以布尔值和错误日志形式保存抓取状态,例如,
isFetching
和fetchListError
,在抓取过程中更新这些值,并将这些值传递给查看层进行显示 据我所知,我们有带组件的react应用程序和带商店的redux应用程序。我们使用
另一个库react redux绑定react app和redux app。React-redux帮助在React组件中使用redux存储状态,并帮助从React组件向redux存储分派操作
为了处理像Redux thunk这样的异步操作库,根据异步操作的结果,这些库会分派操作
回答您的问题:React不知道在Redux存储中调度了哪个操作,因为它是由thunk中间件处理的。但是使用React-redux,React可以知道thunk中间件发送操作后的当前redux存储状态。所以我认为你应该选择第二种选择。第一个选项可能是可能的,但它需要大量的黑客攻击,而不仅仅是使用第一个选项。据我所知,我们有react应用程序和组件以及redux应用程序和store。我们使用 另一个库react redux绑定react app和redux app。React-redux帮助在React组件中使用redux存储状态,并帮助从React组件向redux存储分派操作 为了处理像Redux thunk这样的异步操作库,根据异步操作的结果,这些库会分派操作
回答您的问题:React不知道在Redux存储中调度了哪个操作,因为它是由thunk中间件处理的。但是使用React-redux,React可以知道thunk中间件发送操作后的当前redux存储状态。所以我认为你应该选择第二种选择。第一个选项可能是可行的,但它需要大量的黑客攻击,而不仅仅是使用第一个选项。我会在redux中使用一个属性来设置成功和失败,在组件中,我会检查redux属性和列表长度(如果请求成功且返回的列表为空怎么办)我将在redux中使用一个属性来设置成功和失败,在组件中,我将检查redux属性和列表长度(如果请求成功,列表返回为null怎么办)
if (actiontype === "GET_LIST_SUCCESS") {
// do something
}
if (this.props.list.length > 0) {
// do something
}