• Home
  • React Native
  • Jak przekazać dane z komponentu dziecka do komponentu rodzica w React Native?

Jak przekazać dane z komponentu dziecka do komponentu rodzica w React Native?


Jak zaktualizować stan rodzica z komponentu dziecka w React Native ?

Przekazywanie danych z komponentu dziecka do komponentu rodzica jest łatwe. Wystarczy, że umieszczając komponent dziecko w treści rodzica przekażemy do niego funkcję, która ustawia w stanie komponentu rodzica odpowiednie dane, a następnie uruchomimy te dane z komponentu dziecka, np. poprzez kliknięcie w przycisk. Schemat przedstawia się następująco:

Parent.js

import React, {Component} from 'react';
import {StyleSheet, Text, View, TouchableHighlight, Image} from 'react-native';
import Child from './Child';

export default class Parent extends Component {
    constructor(props) {
        super(props);
        this.state = {
            data: ''
        };
    }
    
    passData = (passedData) => {
        this.setState({ data: passedData });
    };

    render() {
        return (
            <View>
                <Child passData={this.passData} />
                <Text> {this.state.data} </Text>
            </View>
        );
    }
}

Child.js

import React, {Component} from 'react';
import {Text, View, TouchableHighlight,} from 'react-native';

export default class Child extends Component {
    constructor(props) {
        super(props);
        this.state = {
            data: "Yeah, it's working!"
        };
    }
    render() {
        return (
            <View>
                <TouchableHighlight onPress={() => this.props.passData(this.state.data)} >
                    <Text style={{fontSize: 20, backgroundColor: 'yellow', padding: 20}}> Pass data to parent </Text>
                </TouchableHighlight>
            </View>
        );
    }
}

Efekt będzie jak poniżej:

How to pass data from child component to parent component in React Native? Jak przekazać dane z komponentu dziecka do komponentu rodzica w React Native?

Joanna

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *