Я пытался исправить это, но у меня закончились идеи. Это мой первый реактивный проект. Я пытаюсь добавить поисковый запрос в раскрывающийся список навигации. Я использую реакцию-бутстрап. Я знаю, что я близок к тому, чтобы он заработал, потому что, если я удалю форму и помещу ее за пределы раскрывающегося списка, например, поместив ее в заголовок, она будет работать нормально. Итак, что-то внутри раскрывающегося списка вызывает ошибку. Я сузил круг вопросов до отказа.
<Navbar inverse collapseOnSelect>
<Navbar.Header> ...
</Navbar.Header>
<Navbar.Collapse>
<Nav pullRight>
<NavItem eventKey = {1} href = "#" className = "nav-item">
Home
</NavItem>
<NavDropdown eventKey = {3} title = "Watches" id = "basic-nav-dropdown">
<MenuItem eventKey = {3.3} className = "nav-item">
<form onSubmit = {this.onFormSubmit}>
<input
type = "text"
value = {this.state.term}
onChange = {this.onInputChange}
onClick = {this.onClickStopDismiss}
/>
<input type = "submit" value = "Submit" />
</form>
</MenuItem>
</NavDropdown>
</Nav>
</Navbar.Collapse>
</Navbar>
Обработчики, написанные внутри одного и того же со вкусом оформленного компонента, приведены ниже. Причина добавления onClickStopDismiss к вводу заключается в том, что, когда я выбираю панель поиска внутри раскрывающегося списка, она закрывает ее, прежде чем я смогу ввести. Добавив этот onClick к поисковому вводу, он остановил закрытие раскрывающегося списка.
Состояние передается родительскому компоненту, но здесь это не актуально, потому что внутри console.info ничего не появляется до того, как он будет передан родительскому компоненту. Итак, что-то мешает кнопке отправки.
class NavMain extends Component {
state = {
term: ""
};
onInputChange = e => {
this.setState({ term: e.target.value });
};
onFormSubmit = e => {
console.info(this.state.term);
e.preventDefault();
// call back function that will run when called from parent component
this.props.onTermSubmit(this.state.term);
this.setState({ term: "" });
};
onClickStopDismiss = e => {
// e.preventDefault();
e.stopPropagation();
};
Любые идеи приветствуются, пожалуйста. Обновлено: в консоли нет ошибок.
Хороший момент, я забыл это проверить. Да, если я добавляю onClick в onClick = {() => console.info ("submit")} к кнопке, нажимаются консольные журналы. Я попробую запустить такую форму 1 секунду
WOO спасибо, все теперь работает. Поэтому вместо использования onSubmit в форме. Я использовал onClick = this.buttonFormSubmitClicked на кнопке формы. Затем в buttonFormSubmitClicked я использовал код из формы отправки, чтобы изменить состояние и поднять состояние. спасибо всем спасибо сейчас пытаюсь решить, как наградить ответ = /
Рад, что помог! Я ответил, чтобы людям было легче понять, что решило вашу проблему.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам необходимо назначить e.target.value переменной, прежде чем передавать ее в setState().
onInputChange = e => {
let event = e.target.value;
this.setState({ term: event })
}
Это происходит потому, что setState() является асинхронным, поэтому к моменту его выполнения ваша ссылка на e.target.value может существовать или не существовать.
Привет, Джогрио. Я попытался внести изменения, но все еще не работает. Форма вне раскрывающегося списка работает с вашим кодом и моим старым кодом, но форма внутри раскрывающегося меню навигации не регистрирует отправку. Я даже упростил тестирование. У onFormSubmit теперь есть console.info ('clicked'), поэтому каждый раз, когда я нажимаю "Отправить", консольный журнал должен щелкать форму за пределами навигационной панели, чтобы отобразить консоль, но консоль внутри раскрывающегося списка ничего не делает. Таким образом, даже не меняя состояние, кнопка отправки не срабатывает.
В качестве обходного пути вы можете обнаружить событие отправки, добавив обработчик щелчка непосредственно к элементу input и пропустив использование форм в этом конкретном случае.
<Navbar inverse collapseOnSelect>
<Navbar.Header> ...
</Navbar.Header>
<Navbar.Collapse>
<Nav pullRight>
<NavItem eventKey = {1} href = "#" className = "nav-item">
Home
</NavItem>
<NavDropdown eventKey = {3} title = "Watches" id = "basic-nav-dropdown">
<MenuItem eventKey = {3.3} className = "nav-item">
<input
type = "text"
value = {this.state.term}
onChange = {this.onInputChange}
onClick = {this.onClickStopDismiss}
/>
<input type = "submit" value = "Submit" onClick = {onSubmit} />
</MenuItem>
</NavDropdown>
</Nav>
</Navbar.Collapse>
Обнаруживает ли он щелчок, если вы добавляете обработчик непосредственно к кнопке? то есть:
<input type = "submit" value = "Submit" onClick = {onSubmitClick}/>