2016-10-25 1 views
2

ich einfache Komponente habe Liste genannt, die ein einfacher ul ist mit einigen li innen. Jede li ist eine einfache Komponente. Ich habe andere Elternkomponente, die ein Eingabefeld und die Liste Komponente rendern. Tippen auf Senden Schlüssel Ich fange Text des Eingabefeldes. Ich möchte zum Beispiel eine Funktion namens handleNewText (inputText) aufrufen, aber diese Funktion muss in List-Komponente bleiben, da der Zustand, den ich benutze Komponenten in Liste Komponente bevölkern.Anruf Kind Komponentenmethode von den Eltern in reagiert

I don‘t wollen Liste und MyParent Komponente Refactoring die von Liste MyParent verwalten von Daten übergeben.

erste ist, Eltern und zweite ist Kind

class TodoComp extends React.Component { 
 
    constructor(props){ 
 
    super(props); 
 
    this.handleKeyPress = this.handleKeyPress.bind(this); 
 
    } 
 

 
    componentDidMpunt(){ 
 
    console.log(this._child.someMethod()); 
 
    } 
 

 

 
    handleKeyPress(event){ 
 
    if(event.key === 'Enter'){ 
 
     var t = event.target.value; 
 

 
    } 
 
    } 
 

 
    render(){ 
 
    return (
 
     <div> 
 
      <input 
 
      className="inputTodo" 
 
      type="text" 
 
      placeholder="want to be an hero...!" 
 
      onKeyPress={this.handleKeyPress} 
 
      /> 
 
      <List/> 
 
     </div> 
 
    ); 
 
    } 
 

 
} 
 

 

 
export default class List extends React.Component { 
 
    constructor() { 
 
    super(); 
 
    this.flipDone = this.flipDone.bind(this); 
 
    this.state = { 
 
     todos: Array(3).fill({ content: '', done: false}) 
 
    }; 
 
    } 
 

 
    flipDone(id) { 
 
    let index = Number(id); 
 

 
    this.setState({ 
 
     todos: [ 
 
     ...this.state.todos.slice(0, index), 
 
     Object.assign({}, this.state.todos[index], {done: !this.state.todos[index].done}), 
 
     ...this.state.todos.slice(index + 1) 
 
     ] 
 
    }); 
 
    } 
 

 
    render() { 
 

 
    const myList = this.state.todos.map((todo, index) => { 
 
     return (
 
     <Todo key={index} 
 
       clickHandler={this.flipDone} 
 
       id={index} 
 
       todo={todo} 
 
       handleText={this.handleText} 
 
     /> 
 
    ); 
 
    }) 
 

 
    return (
 
     <ul className="list"> 
 
     {myList} 
 
     </ul> 
 
    ); 
 
    } 
 

 

 
ReactDOM.render(<TodoComp />,document.getElementById('myList'));

+0

Können Sie Ihren Code zeigen? –

Antwort

4

Sie müssen Verwendung von Refs, um eine Funktion in der Kind-Komponente aufzurufen, von der übergeordneten Komponente

die Liste machen Komponente, die aus übergeordneten als

<List ref="myList"/> 

und dann Zugriff auf die handleNewText() Funktion als this.refs.myList.handleNewText()

UPDATE:

Strings Refs nicht mehr empfohlen werden durch Reagieren Sie eher ref Rückrufe verwenden sollten, überprüfen this

<List ref={(ref) => this.myList=ref}/> 

und dann Zugang das Kind Funktion wie

this.myList.handleNewText()