#reactjs #state
#reactjs #состояние
Вопрос:
во время изучения react я создал меню и по щелчку меню открываю форму. я хочу иметь значок «закрыть» в форме, который при нажатии закрывает форму и снова открывает ее при нажатии на меню.
я создал родительский компонент, который обрабатывает состояние формы (дочерний компонент). он управляет showchild = true или false .
//this is button defined on form compenent
<button onClick={this.props.onClose}>Self Close</button>
//this is parent component
import React from 'react';
import DemoForm from './form';
class ParentComponent extends React.Component {
closeChild = () => {
this.setState({
showChild: false,
});
};
constructor(props) {
super(props);
this.state = {
showChild: true
};
}
render() {
return (
<div>
{this.state.showChild amp;amp; <DemoForm onClose={this.closeChild} />}
</div>
);
}
}
export default ParentComponent;
это работает нормально, при нажатии кнопки форма закрывается, я проверил реакцию, состояние формы изменяется с showchild true на false. проблема в том, что в следующий раз, когда я попытаюсь щелкнуть меню, чтобы открыть эту форму, форма не откроется. потому что состояние showchild = false .
можем ли мы изменить состояние формы на showchild = true, как только форма будет окончательно закрыта, или любой другой метод.
как я могу этого добиться? я все еще реагирую, и следующей целью является сокращение. могу ли я сделать это с помощью управления состоянием реакции.
Комментарии:
1. Можете ли вы показать код для логики открытия формы?
2. это просто из react-router-dom
Ответ №1:
Вы просто меняете эту closeChild()
функцию на triggerMenu()
, поэтому, когда она открыта, она закроется, а когда она закрыта, она откроется:
triggerMenu = () => {
this.setState((prevState) => {
showChild: !prevState.showChild
})
};
Комментарии:
1. @Phillip да, извините, я пропустил это. Отредактируйте ответ, спасибо
2.
closeChild = () => { this.setState(prevState => ({ showChild : !prevState.showChild })); };
я сделал это, но все то же самое, не могу открыть форму 2-й раз.3. @RanuVijay это должно сработать, убедитесь, что вы указали
onClose
иonClick
обаcloseChild
. Поскольку этот код обновляет состояние изtrue to false
и изfalse to true
4. @ErtanHasani когда я проверяю инструмент разработчика react, чтобы узнать состояние формы после нажатия кнопки, он показывает «showChild: false», и именно по этой причине я не могу открыть его во второй раз.
5. ` <кнопка onClick={this.props.OnClose}>Самозакрывается</button>
from form and
<Демоформировать OnClose={this.closeChild} />` из родительского компонента уже указывает на closeChild