Подтвердить что ты не робот

ReactJS - вызов метода одного компонента из другого компонента

У меня есть два компонента. Я хочу вызвать метод первого компонента из второго компонента. Как я могу это сделать?

Вот мой код.

Первый компонент

class Header extends React.Component{

    constructor(){
        super();
    }

    checkClick(e, notyId){
       alert(notyId);
    }
}

export default Header;

Второй компонент

class PopupOver extends React.Component{

    constructor(){
        super();
        // here i need to call Header class function check click....
        // How to call Header.checkClick() from this class
    }

    render(){
        return (
            <div className="displayinline col-md-12 ">
                Hello
            </div>
        );
    }
}

export default PopupOver;
4b9b3361

Ответ 1

Вы можете сделать что-то вроде этого

import React from 'react';

class Header extends React.Component {

constructor() {
    super();
}

checkClick(e, notyId) {
    alert(notyId);
}

render() {
    return (
        <PopupOver func ={this.checkClick } />
    )
}
};

class PopupOver extends React.Component {

constructor(props) {
    super(props);
    this.props.func(this, 1234);
}

render() {
    return (
        <div className="displayinline col-md-12 ">
            Hello
        </div>
    );
}
}

export default Header;

Использование статики

var MyComponent = React.createClass({
 statics: {
 customMethod: function(foo) {
  return foo === 'bar';
  }
 },
   render: function() {
 }
});

MyComponent.customMethod('bar');  // true

Ответ 2

Ну, на самом деле, React не подходит для вызова дочерних методов из родителя. Некоторые фреймворки, такие как Cycle.js, позволяют легко получать доступ к данным как от родителя, так и от ребенка и реагировать на него.

Кроме того, есть хороший шанс, что вам это действительно не нужно. Рассмотрите возможность вызова его в существующий компонент, это гораздо более независимое решение. Но иногда вы все еще нуждаетесь в этом, и тогда у вас мало вариантов:

  • Метод передачи вниз, если он является дочерним (самый простой и является одним из переданных свойств)
  • добавить библиотеку событий; в методе "Реакция экосистемного потока" наиболее известна, с Redux. Вы разделяете все события на отдельные состояния и действия и отправляете их из компонентов.
  • Если вам нужно использовать функцию от дочернего элемента в родительском компоненте, вы можете обернуть его третьим компонентом и клонировать родительский элемент с расширенными реквизитами.

UPD: если вам нужно поделиться некоторыми функциями, которые не связаны с каким-либо состоянием (например, статические функции в ООП), тогда нет необходимости содержать его внутри компонентов. Просто объявите его отдельно и вызовите при необходимости:

let counter = 0;
function handleInstantiate() {
   counter++;
}

constructor(props) {
   super(props);
   handleInstantiate();
}