javascript - React 子组件可以更改存储在其父组件中的数据吗?

标签 javascript reactjs react-native

React 文档建议按照以下方式在组件中存储数据:

  • props 用于传递和存储不可变数据
  • state 用于存储渲染的动态数据
  • 未渲染的动态数据可以存储在任何方法中定义为 this.attribute 的实例属性中

所以我的问题是,子组件可以更改其父组件的数据吗?

文档建议这样做,用于更改祖先组件中的状态。 但是,我正在使用的数据不会呈现,因此会保存为属性。是否建议我使用回调函数从子组件修改它?

为了澄清起见,我并不是在谈论更改 propsstate。我想更改父级中的类属性。

React 文档建议将未渲染的可变数据存储在简单的属性中。

提前致谢。

最佳答案

一个选项是使用回调。 在这里,您公开来自父组件的回调,该回调会更改父组件的数据(状态),子组件使用一个 prop 从父组件的状态获取数据。就是这样!

import React, {Component} from 'react';
import {AppRegistry, StyleSheet, Text, View, TouchableOpacity} from 'react-native';


class Child extends Component {
  render() {
    const { data } = this.props;
    console.log(`Child Component Data is ${data}`);
    return (
      <TouchableOpacity onPress={() => {this.props.onChange('Success!')} }>
        <Text style={{fontSize: 30}}>{data}</Text>
      </TouchableOpacity>
    );
  }
}

class Parent extends Component {

  constructor() {
    super();
    this.state = {
      data: 'default data in parent'
    }
  }

  onChange = (data) => {
    console.log(`Data changes to ${data} !`);
    this.setState({ data });
  }

  render() {
    const { data } = this.state;
    return <Child data={data} onChange={this.onChange}></Child>;
  }
}


AppRegistry.registerComponent('ChildEditParentData', () => Parent);

更新:

Facebook has a nice tutorial on similar issue, and Facebook names this as "Lifting State Up"

关于javascript - React 子组件可以更改存储在其父组件中的数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45184823/

相关文章:

javascript - 下拉列表自动填充到页面上的文本(非输入字段)

javascript - jQuery 不阻止提交表单

reactjs - 如何在 MUI 5 中扩展 theme.mixins

javascript - 切换路由时 React Router Kepps css

javascript - ReactJS:Axios 的异步请求返回 'undefined'

javascript - Touchableopacity onpress 在 SVG 标签内不起作用

javascript - 为 TextInput 提供自定义 Prop 并将其用于事件处理程序

android - Firebase AdMob 警告 : 'the ad request was successful but no ad was returned due to lack of ad inventory'

javascript - 在 Android 设备上显示 div

javascript - 解析 JS SDK : relation. add() 不起作用