刷新反应组件或通量/还原中的逻辑?

时间:2015-11-12 10:04:36

标签: reactjs flux reactjs-flux redux

所以我对React相当新,我不能围绕如何基于另一个组件重新渲染主要组件的概念。

假设我们有一个待办事项应用程序,待办事项可以有一个状态(新的,运行的,关闭的)。我们在列表中显示所有待办事项,我们可以根据状态过滤项目。我们使用bootstrap dropdownbutton like component来设置过滤器,这是一个React组件。现在,当我们更改过滤器时,我们显然想要刷新待办事项。

我的问题是,所选状态的逻辑是否属于Flux / Redux,或者过滤器组件是否只是说"刷新您的项目"到主要组成部分?

3 个答案:

答案 0 :(得分:5)

在React应用程序中使用Redux时,请遵循一个简单规则 - 所有组件都无状态(表示没有组件初始化其状态或调用.setState()任意位置)。

基于state container的redux设计方法,一个 big 对象,它包含所有应用程序状态。作为React组件,Redux存储为connected,Redux会将状态(或其一部分)传递给该组件,作为this.props.state属性。

高阶组件(或智能组件)渲染其子组件(或哑组件)并处理来自它们的事件。

如果子组件需要更改,它会触发相应的处理程序(通常以props传递)。改变状态的唯一方法是派遣一个动作。该操作包含类型和有效负载,并且基于该类型,选择相应的 reducer 。然后,reducer根据先前的状态和动作有效负载生成一个新状态。

如果在reducer调用的结果中,状态发生了变化,Redux将重新渲染高阶分量,在属性中传递新状态。因此,所有子组件都将相应更新。

选中此example并跟踪AddTodo组件调用.handleClick()的方式,然后追溯调度操作的.onAddClick()

答案 1 :(得分:1)

如果您使用的是redux,那么在您的下拉列表中,您应该有一个onchange处理程序,每次使用所选状态(new,running,closed)更改值时,都会调度操作。

Redux reducer将通过在商店中相应地更改某些状态来处理此操作,例如:display ='completed'。除此之外,您的待办事项列表也应存储在商店中,它可能是一个数组。

你的react组件应该接收一个todo数组并显示为props,因此每当任何prop(todo数组或显示)改变时,它都会触发重新渲染。

在这种情况下,您的组件应该只显示那些完整的待办事项(即在渲染中检查每个待办事项的状态=== this.props.display。

所以回答你的问题:redux保持下拉状态,传递给你的主要组件,你的主要组件然后只渲染符合标准的待办事项。

答案 2 :(得分:-1)

因此,以非常小的方式,您可以将一个函数传递给选择框,该选择框在顶级组件上调用setState。当该状态改变时,它将重新呈现其子组件。这种模式不能很好地扩展,并导致同样的地狱React + Flux试图让我们远离(状态无处不在)。我会说,使用Flux(甚至更好的Redux),触发一个动作,在你的商店中设置过滤器,并根据过滤器状态+ todo列表中的todo列表使用派生数据。