Reactjs React-Redux:将状态传递给操作是反模式的。什么';什么是解决办法?

Reactjs React-Redux:将状态传递给操作是反模式的。什么';什么是解决办法?,reactjs,redux,react-redux,redux-thunk,Reactjs,Redux,React Redux,Redux Thunk,如图所示,将状态传递给ActionCreator被认为是一种反模式。使用Redux Thunk中间件访问状态也是如此。我想知道如何解决以下(流行的)情况: 我从服务器获取项目,基于前端搜索表单中的过滤器。当然,我需要将过滤器传递给我的服务器,所以我在action creator中这样做 export function getResults(filters){ return Axios.get('localhost:80/getresults/',{params:filters}).then

如图所示,将状态传递给ActionCreator被认为是一种反模式。使用Redux Thunk中间件访问状态也是如此。我想知道如何解决以下(流行的)情况:

我从服务器获取项目,基于前端搜索表单中的过滤器。当然,我需要将过滤器传递给我的服务器,所以我在action creator中这样做

export function getResults(filters){
   return Axios.get('localhost:80/getresults/',{params:filters}).then(
      // do something with results here.
   )
}
但这被认为是一种反模式,因为
过滤器
来自商店

或者,我可以像这样使用redux thunk:

export function getResults(){
   return function(dispatch,getState){
      var filters = getState().reducer.filters;
      return Axios.get('localhost:80/getresults/',{params:filters}).then(
         // do something with results here.
      )
   }
}
这也被认为是一种反模式,因为我正在访问状态


那么,我如何以正确的方式实施它呢?我是否应该完全在其他地方调用ajax?

尽管我尊重Dan,但我不同意他的评论。对我来说,访问thunks中的状态绝对是一个有用的工具,无论它是决定是否实际分派操作,还是使用现有状态帮助生成操作的内容


我想说你的例子是完全可以接受的。

尽管我尊重丹,但我不同意他的评论。对我来说,访问thunks中的状态绝对是一个有用的工具,无论它是决定是否实际分派操作,还是使用现有状态帮助生成操作的内容


我想说你的thunk示例是完全可以接受的。

不应该直接从action creator访问状态,这是你所指答案(第二种方法)的主要思想。但是您可以自由地将任何参数(状态或其他对象的一部分)传递给您的操作创建者,这是您展示的第一种方法。@Ziumin回答中说“在操作创建者中传递诸如state.something.items之类的数据肯定是一种反模式,不鼓励这样做,因为它会掩盖更改历史”。它们是否意味着可以将数据传递给动作,而不是从动作内部传递给其他对象?将状态作为参数传递给动作会使动作独立于状态,它甚至不知道状态存在。您可以通过一些模拟过滤器轻松地对其进行测试。但是如果你从你的动作中获得状态,那么造物主就会变得有状态。它类似于
add(2)
add(2,2)
。哪一个更容易测试?哪一个结果你很容易预测?@Ziumin很公平!谢谢状态不应该直接从action creator访问,这是您所指答案(第二种方法)的主要思想。但是您可以自由地将任何参数(状态或其他对象的一部分)传递给您的操作创建者,这是您展示的第一种方法。@Ziumin回答中说“在操作创建者中传递诸如state.something.items之类的数据肯定是一种反模式,不鼓励这样做,因为它会掩盖更改历史”。它们是否意味着可以将数据传递给动作,而不是从动作内部传递给其他对象?将状态作为参数传递给动作会使动作独立于状态,它甚至不知道状态存在。您可以通过一些模拟过滤器轻松地对其进行测试。但是如果你从你的动作中获得状态,那么造物主就会变得有状态。它类似于
add(2)
add(2,2)
。哪一个更容易测试?哪一个结果你很容易预测?@Ziumin很公平!谢谢