Как правильно менять состояние потомка (или вызывать функции) из родителя в React.Js?
Этот вопрос возник при реализации следующей логики:
есть кнопка "регистрация" при нажатии на которую должно появиться диалоговое окно с полями для регистрации и кнопкой "подтвердить". При нажатии кнопки "подтвердить" мне нужно выполнить например функцию signup в конце которой мне нужно закрыть это диалоговое окно.
Моя текущая реализация с использованием react-bootstrap:
ModalInstance.js:import React from 'react';
import { Button, Modal } from 'react-bootstrap';
const ModalInstance = React.createClass ({
getInitialState() {
return { showModal: false };
},
close() {
this.setState({ showModal: false });
},
open() {
this.setState({ showModal: true });
},
render() {
return (
<div id={this.props.id}>
<Button bsStyle="primary" onClick={this.open}>{this.props.buttonName}</Button>
<Modal ref="modal" show={this.state.showModal} onHide={this.close}>
<Modal.Header closeButton>
<Modal.Title>{this.props.title}</Modal.Title>
</Modal.Header>
<Modal.Body>
{this.props.children}
</Modal.Body>
</Modal>
</div>
);
}
})
module.exports = ModalInstance;
header.js:
...
const Header = React.createClass ({
signup() {
...
let modal = this.refs.modal;
modal.close();
},
render() {
...
<ModalInstance
ref="modal"
id="signupModalButton"
title="Sign up"
buttonName="Sign up">
<form>
...
<Button bsStyle="primary" onClick={this.signup}>Sing up</Button>
</form>
</ModalInstance>
}
Смущает, то что я использую refs, в документации советуют избегать использования этого механизма для понятного data-flow. Насколько анти-патерно мое решение и как сделать это в стиле react way?
Будет ли более правильным подходом сделать например в header showModal состояние и передавать его в modalinstance через props и использовать его в getInitialState()?