当前位置: 首页 > 面试题库 >

如何在Redux中将全局状态数据处理到深度嵌套的组件中?

赵嘉悦
2023-03-14
问题内容

假设您使用此组件结构进行聊天:

<ChatApp>
  <CurrentUserInfo>...</CurrentUserInfo>
  <ChatsPanel>...</ChatsPanel>
  <SelectedChatPanel>
    <MessagesList>
      <MessageBaloon>
        <MessageText></MessageText>
        <MessageUserHead></MessageUserHead>
      </MessageBaloon>
      ...
    </MessagesList>
  <SelectedChatPanel>
</ChatApp>

和一个Redux状态如:

{ 
  currentUser: ...,
  chatsList: ...,
  selectedChatIndex: ...,
  messagesList: [ ... ]
}

您如何使当前用户信息可用于<MessageUserHead>组件(它将为每条消息呈现当前用户缩略图),而不必从根组件一直到所有中间组件一直传递它?

以同样的方式,您将如何使诸如当前语言,主题等信息可用于组件树中的每个表示/哑组件,而又无需暴露整个状态对象


问题答案:

要获取所有“哑巴”组件的全局信息,可以使用react上下文。

人为的例子

// redux aware component
var ChatApp = React.createClass({
  childContextTypes: {
    language: React.PropTypes.string
  },
  getChildContext: function() {
    // or pull from your state tree
    return {language: "en"};
  },
  ...
}

// dumb components
var ExDumb = React.createClass({
  contextTypes: {
    language: React.PropTypes.string
  },

  render: function() {
    var lang = this.context.language;
    return ( <div /> );
   }
 });

为了回应评论,redux 在其react-redux库中使用了这种上下文方法。

更抽象地说,在react之外使用时,可以在状态树上使用某种pluck或选择器函数,并且仅返回哑组件所需的全局状态的子集。



 类似资料:
  • 人们通常如何在React应用程序中拥有“全局”数据? 例如,假设一个用户登录到我的应用程序后,我有以下数据。 但这对我来说似乎很困难,因为这意味着我必须通过每个组合传递数据,只是为了将其传递给需要它的孩子。 是否有一种React方法来管理这种类型的数据? 注意:这个示例非常简化--我喜欢将意图包装成复合,这样整个UI特性的实现细节就可以在我认为合适的时候进行彻底的更改。 编辑:我知道默认情况下,在

  • 问题内容: 我有一个具有与组件本身相同类型的子组件的组件。我也可以渲染孩子,但是孩子似乎无法访问他们的状态。我在Redux中使用React 另外,我正在使用Material-ui中的ListItem(它们最终呈现在List组件中),并且我的代码受到官方redux回购中的树视图示例的严重影响。我的状态如下所示: 所示状态与树状示例中的状态相同 问题答案: 好吧,如果我理解正确,那么您希望这些组件从r

  • 我正在尝试学习React(使用redux),所以我正在制作一个应用程序,在其中我可以创建训练计划,将训练添加到计划中,然后将训练添加到训练中。 PlanListComponent 我的PlansList组件为每个计划呈现一张卡片。在这张卡片中,它为该计划中的每个训练呈现一个训练列表。将训练添加到计划后,“计划列表”组件不会重新渲染。添加的训练仅在我刷新页面后显示。我之所以选择这种情况,是因为我必须

  • 问题内容: 所以,我有多个ReactComponent。最初,我以为会有一个带有其自身状态的父组件(简称为GrandPa),它将有关其状态的一些信息传递给另一个组件(称为Parent)。同样,父母将他的一些财产传给孩子,孩子则传给孙子。因此,我们具有层次结构: 爷爷->父母->孩子->孙子 但是,我很快意识到,当我使用method 更改GrandPa的状态时,所做的更改不会沿通道向下级联。我意识到

  • 我试图通过一个reducer在我的react.js/redux应用程序中设置一个深度嵌套的对象,但是对象更改并没有传播到我的组件中。我应该如何更新和mapStateToProps这样的对象? 我已经尝试了…在我的reducer中添加我的操作的有效负载,在mapStateToProps中映射一个更高级别的对象,并将我映射到组件道具的对象扁平化。 我的初始状态: 结果是我的组件没有显示Redux的状态

  • 下面是一个java类CreateDoc,它从一个作为生产者端的web服务发送到另一个作为消费者端的web服务,其内容类型为:json 下面是类表示 一旦我在消费者端接收到作为json的列表,我就不能将其用作java对象,并且内容类型是数组,其中json嵌套在数组中。 以下是代表: 问题是如何处理这一点,并能够使用数据和表示为列表。

  • 问题内容: 我想从我的redux状态中删除一个元素。我使用无缝不可变及其API对状态进行操作。但是我找不到在嵌套状态时删除元素的任何好方法。 所以我要删除的元素是: 谢谢! 问题答案: 有时我也陷入了类似情况。 因此,根据redux docs ,更新嵌套对象的方式是:- 但是由于数组处于状态,这会使您的工作更加困难。 因此,有两种方法可以执行此操作。 第一种方式(困难的方式) 自己创建一个新对象并

  • 我有这门课: 并希望在“列表”状态数组中的“卡片”数组上使用setState。以前,我在子组件中使用了cards数组,但现在我将其上移到Board类。这是我以前拥有的功能。 我如何改变它,使它现在工作,卡是在另一个数组? 我无法解决它看这些帖子: ReactJS-数组中对象键的设置状态 如何编辑状态数组中的项?