Tenho dois componentes: Componente pai, do qual desejo alterar o estado do componente filho:
class ParentComponent extends Component {
toggleChildMenu() {
?????????
}
render() {
return (
<div>
<button onClick={toggleChildMenu.bind(this)}>
Toggle Menu from Parent
</button>
<ChildComponent />
</div>
);
}
}
E componente filho :
class ChildComponent extends Component {
constructor(props) {
super(props);
this.state = {
open: false;
}
}
toggleMenu() {
this.setState({
open: !this.state.open
});
}
render() {
return (
<Drawer open={this.state.open}/>
);
}
}
Eu preciso alterar o estado aberto do componente filho do componente pai ou chamar toggleMenu () do componente filho do componente pai quando o botão no componente pai é clicado?
javascript
reactjs
Torayeff
fonte
fonte
Respostas:
O estado deve ser gerenciado no componente pai. Você pode transferir o
open
valor para o componente filho adicionando uma propriedade.fonte
classNames({ foo: true, bar: this.props.open });
// => 'foo' quando this.props.open = false e 'foo bar' quando this.props.open = true.toggle
ao ChildComponent<ChildComponent open={this.state.open} toggle={this.toggleChildMenu.bind(this)} />
e chamarthis.props.toggle()
o componente filhoChildComponent
-><ChildComponent toggle={this.toggleChildMenu.bind(this)} />
O componente pai pode gerenciar o estado filho passando um prop para o filho e o filho converter esse prop no estado usando componentWillReceiveProps.
fonte
getDerivedStateFromProps()
. No entanto, a resposta de Miguel sugerindo o usocomponentWillReceiveProps(props)
está disponível e funcionou como um encanto no meu env.A resposta acima está parcialmente correta para mim, mas no meu cenário, quero definir o valor para um estado, porque usei o valor para mostrar / alternar um modal. Então eu usei como abaixo. Espero que ajude alguém.
Referência - https://github.com/kriasoft/react-starter-kit/issues/909#issuecomment-252969542
fonte
Você pode enviar um prop do pai e usá-lo no componente filho para basear as mudanças de estado do filho nas mudanças do prop enviado e pode lidar com isso usando getDerivedStateFromProps no componente filho.
fonte
Você pode usar o createRef para alterar o estado do componente filho do componente pai. Aqui estão todas as etapas.
Crie um método para alterar o estado no componente filho.
2 - Crie uma referência para o componente filho no componente pai usando React.createRef ().
3 - Anexe a referência com o componente filho usando ref = {}.
4 - Chame o método do componente filho usando this.yor-reference.current.method.
Componente pai
Componente Criança
fonte