所以我对React相当新,我不能围绕如何基于另一个组件重新渲染主要组件的概念。
假设我们有一个待办事项应用程序,待办事项可以有一个状态(新的,运行的,关闭的)。我们在列表中显示所有待办事项,我们可以根据状态过滤项目。我们使用bootstrap dropdownbutton like component来设置过滤器,这是一个React组件。现在,当我们更改过滤器时,我们显然想要刷新待办事项。
我的问题是,所选状态的逻辑是否属于Flux / Redux,或者过滤器组件是否只是说"刷新您的项目"到主要组成部分?
答案 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列表使用派生数据。