Передача реквизита из родительского в дочерний компонент - PullRequest
0 голосов
/ 10 сентября 2018

у меня есть родительский класс

import React, { Component } from 'react';
import { View, TouchableOpacity, Text, ListView } from 'react-native';
import Profile from './UserBlock';    

export default class ControlPanel extends Component {
      constructor(props){
        super(props)
        console.log(this.props)
        this.state = {
          email: "email@gg.com",
          first_name: "User",
          image : '../img/user.png'
        }
      }

      render() {
        return(
        <View style={{backgroundColor:'rgba(255,255,255,0.93)', flex:1,}}>
          <Profile {...this.props} />
        </View>)
      }
    }

И дочерний компонент

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

    export default class UserBlock extends Component {
              constructor(props){
                super(props)
                this.state = {}
              }

              render() {
                return(
                <View style={{flexDirection:'row', padding:10}}>
                    <Image source ={{uri : this.props.state.image}} resizeMode="contain" style={{margin:15, width:60, height:60, borderRadius:30}} /> 
                    <View style ={{justifyContent:'center', margin:15}}>
                    <Text style={{fontWeight:'700', fontSize:25, color:'#444'}}>{this.props.state.first_name}</Text>
                    <Text style={{fontWeight:'200', color:'#999'}}>{this.props.state.email}</Text>
                    </View>
                </View>)
              }
            }

Но когда я пытаюсь прочитать родительский реквизит, у меня появляется ошибка "Ошибка типа: undefined не является объектом"
Но мне показалось, что я все делал правильно.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

То, что Карл упомянул о передаче состояния, верно, но есть проблема и в дочернем компоненте.

В вашем дочернем компоненте - замените this.props.state.xxxx на this.props.xxxx, где xxxx - это ваш адрес электронной почты / имя_первой / изображение.

Это должно решить проблему.

(Необязательное предложение: если вы хотите сделать еще проще - сопоставьте свое дочернее состояние с родительскими реквизитами, чтобы вы могли изменить и передать родителя при необходимости)

Вот кодовая песочница для справки: https://codesandbox.io/embed/9o4vqy4104?module=%2Fsrc%2FuserBlock.js

0 голосов
/ 10 сентября 2018

Вы неправильно передаете подпорки дочернему компоненту.

То, что вы делаете, использует оператор распространения для передачи нескольких ключей / значений, но если ваш реквизит пуст, тогда ничего не будет передано.

<Profile {...this.state} />

совпадает с

<Profile
  email={this.state.email}
  first_name={this.state.first_name}
  image={this.state.image}
/>

Чтобы получить родительское состояние в дочерний компонент, вам нужно сделать:

<Profile {...this.state} />

Тогда в вашем дочернем компоненте

console.log(this.props) // would log:
// email: "email@gg.com"
// first_name: "User"
// image : '../img/user.png'
...