2016-07-29 5 views
4

Я разрабатываю свое первое приложение и все еще изучаю поток. Поэтому предположим, у меня есть компонент под названием:Вызов метода родительского компонента из дочернего элемента - React Native

Родитель, который держит метод HelloWorld(), как в следующем примере:

import React, { Component } from 'react'; 

class Parent extends Component { 
    Helloworld() { 
     console.log('Hello world'); 
    } 

    render() { 
     return (
      <View>{this.props.children}</View> 
     ) 
    } 
} 

module.exports = Parent; 

, а затем я хочу, чтобы импортировать это к другому компоненту и использовать его метод, то как я это делаю? Я напишу еще один короткий пример того, как я его реализую.

import React, { Component } from 'react'; 

import { Parent } from 'path to parent'; 
//or 
const Parent = require('path to parent'); 
//which of these is better? 

class Home extends Component { 
    Helloworld() { 
     console.log('Hello world'); 
    } 

    render() { 
     return (
      <Parent> 
       // this is what i need 
       <Button onClick={parent.Helloword()}>Some Button</Button> 
      </Parent> 
     ) 
    } 
} 

module.exports = Home; 

Благодарим вас за помощь.

ответ

2

Обычно вы должны передать информацию от родителя к ребенку через реквизит.

parent.jsx:

import Child from './child'; 

class Parent extends Component { 
    constructor(props) { 
     super(props); 

     this.helloWorld = this.helloWorld.bind(this); 
    } 

    helloWorld() { 
     console.log('Hello world!'); 
    } 

    render() { 
     return (
      <View><Child method={this.helloWorld} /></View> 
     ); 
    } 
} 

child.jsx:

class Child extends Component { 
    constructor(props) { 
     super(props); 
    } 

    render() { 
     return (
      <Button onClick={this.props.method} /> 
     ); 
    } 
} 

Edit: о предпочтении между import и require, я считаю, что это дело вкуса, но я думаю, что import чище.

+0

спасибо, что вернулись ко мне. У меня не было времени, чтобы проверить это, но я сделаю это и верну вам. – TheMan68

+0

Есть еще одна разница в импорте и требует, чтобы я забыл упомянуть: 'import' можно использовать только в начале файлов, а' require' можно использовать где угодно. – lalkmim

+0

оба ответа здесь работают, но я нахожу, что это немного больше с учетом того, что мне нужно. Большое спасибо – TheMan68

1

Мы можем передать опоры в дочернем классе: И затем вызвать его от ребенка: this.props.propName() Мы можем передать строку, число, функцию, массив, объекты в проп

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

var Parent = React.createClass({ 
    render: function() { 
    return (
     <Child foo={()=>this.func1()} bar={()=>this.func2()} /> 
    ); 
    }, 
    func1: function(){ 
    //the func does not return a renderable component 
    console.log('Printed from the parent!'); 
    } 
    func2: function(){ 
    //the func returns a renderable component 
    return <Text>I come from parent!</Text>; 
    } 
}); 

var Child = React.createClass({ 
    render: function() { 
    this.props.foo(); 
    return (
     <Text>Dummy</Text> 
     {this.props.bar()} 
    ); 
    }, 
}); 

module.exports = Parent; 
+0

спасибо, что вернулись ко мне. У меня не было времени, чтобы проверить это, но я сделаю это и верну вам. – TheMan68

+0

этот ответ также хорош, только приведенный выше ответ более приспособлен к тому, что мне нужно. Спасибо – TheMan68

Смежные вопросы