【问题标题】:Updating React Component When Outside Data Changes外部数据更改时更新 React 组件
【发布时间】:2021-03-08 06:59:44
【问题描述】:

假设当我的 React 应用程序运行时,它连接到一个 MQTT 代理,在该代理中数据被发送到应用程序。然后将该数据存储在一个类似于以下内容的对象中:

var data = {
      shoeColor1: 'blue',
      shoeColor2: 'red'
      shoeColor3: 'orange'
}

以下 React 组件显示该数据。

import React, {Component} from 'react';
import { Button } from 'react-native';

export default class Example extends Component {
    constructor(props) {
        super(props)

        this.state = {
            buttonText: `Shoe color is ${this.props.color}`
        }
    }

     render() {
         return (
            <Button title={this.state.buttonText}/>
         )
     }
}

并且会像这样使用:

<Example color={data['shoeColor1']}/>
<Example color={data['shoeColor2']}/>

data 对象会不时发生变化,并且每次发生变化时,显示数据的按钮也会发生变化。我还需要将 data 对象保留在 Example 组件之外,因此我不能让这些更改在内部发生。我真正想要的是一种在 data 对象从外部发生变化时更新 React 组件的方法,但我不确定如何实现这一点。如果我将 stateprops 设置为组件中的某个值,并且这些值在外部发生更改,则该组件将不会重新渲染。

【问题讨论】:

    标签: javascript reactjs react-native react-props react-component


    【解决方案1】:

    这些是实现此功能的以下步骤。

    1. 在父组件中创建状态对象。它将保持颜色的初始状态。
    2. 现在,当 MQTT 将数据发送到您的客户端应用程序时,使用更新的对象设置状态。
    3. 将该状态对象传递给示例组件。

    如果你通过类组件使用状态,那么它会是这样的。

    <Example color={this.state.data['shoeColor2']}/>
    

    如果你使用的是 useState 钩子,那么它会是一样的。

    <Example color={data['shoeColor2']}/>
    

    【讨论】:

      【解决方案2】:

      我建议将data 保留为Example 的父组件中的一个状态,这样当data 更改时,它会触发父组件中的重新渲染,然后父组件应该重新渲染其子组件也是。

      【讨论】:

      • 有没有办法将data 设置为每个Example 组件的一个状态?我在App中直接使用Example组件,所以Example没有父组件。
      • 我明白了...也许你可以让data 成为App 的一部分?我不确定将整个data 鞋子颜色列表传递给每个示例组件是否是个好主意。
      • 我在 node.js 文件中有我的应用程序的后端,然后将该文件导入 App.js,因此 node.js 文件是一个模块,其中一个模块参数是 @987654331 @ 如果我让data 成为App.js 中的一个状态,我仍然必须弄清楚如何让App.js 在模块变量data 发生变化时重新呈现,如果这有意义的话。跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      相关资源
      最近更新 更多