Я пробовал несколько вариантов, в том числе вложенность , опция внутри Ссылка и наоборот, но чистые html-выпадающие списки плохо работают с React Router.
Вот простое исправление:
this.state.datas.map((data,i) =>
<option
key={i}
value={data.display_name}
onClick={(e) => {this.clearData(data.name); this.props.history.push("/search?q=" + encodeURI(data.name)) }}
>
{data.name} // Perhaps you were missing the stuff between the <option> tags too?
</option>)
Если вы правильно подключили свой компонент к маршрутизатору, у вас будет объект history в компонентах компонента и вы сможетевызовите history.push , который перенаправит пользователя на вновь указанный маршрут.
Это создает прослушиватель событий для каждого параметра раскрывающегося списка, поэтому, если у вас много данных, несколько большеПодход с использованием перманента будет состоять в том, чтобы создать другой обработчик событий в вашем классе и присоединить его к слушателю onChange элемента select .
onChange = (event, data) => {
this.clearData(data.name);
this.props.history.push("/search?q=" + encodeURI(data.name));
}
Еще одна вещь, избегайте использования индекса i как ключ , поскольку это может привести к непредвиденным проблемам с рендерингом.Попробуйте найти значение, глобально уникальное для элемента, который вы отображаете.Например, data.data_id будет хорошим ключом , если вы случайно укажете его в своей базе данных.
Подробнее об опасностях индекса в качестве ключа