как я могу получить доступ к истории в моих компонентах react из реквизита?

#javascript #reactjs

#язык JavaScript #реагирует на

Вопрос:

поэтому я пытаюсь получить объект истории из реквизитов в компоненте, над которым я работаю, и он всегда выдает ошибку. это класс, в котором я пытаюсь использовать объект истории

 import React from 'react';  const Admin = (props) =gt; { return (  lt;React.Fragmentgt;  lt;h1gt;Adminlt;/h1gt;   lt;button   onClick={()=gt;this.props.history.push("/edit/new")}  type="button" className="btn btn-primary btn-lg m-1"gt;  Add  lt;/buttongt;  lt;table className="table"gt;  lt;theadgt;  lt;trgt;  lt;th scope="col"gt;Namelt;/thgt;  lt;th scope="col"gt;Pricelt;/thgt;  lt;thgt;lt;/thgt;  lt;thgt;lt;/thgt;   lt;/trgt;  lt;/theadgt;  lt;tbodygt;  {props.prod.map(prod1 =gt;(  lt;tr key ={prod1.id}gt;  lt;tdgt;{prod1.name}lt;/tdgt;  lt;tdgt;{prod1.price}lt;/tdgt;  lt;tdgt;   lt;i   onClick={()=gt;this.props.history.push(`/edit/${prod1.id}`)  }  className="fas fa-edit"gt;lt;/igt;    lt;/tdgt;  lt;tdgt;  lt;span onClick={()=gt;props.delete(prod1)}gt;   lt;i className ="fas fa-trash m-2" gt;lt;/igt;  lt;/spangt;  lt;/tdgt;   lt;/trgt;   ))}      lt;/tbodygt;  lt;/tablegt;        lt;/React.Fragmentgt; );  

}

администратор экспорта по умолчанию;

и приложение.jsx, которое я назвал в маршруте, выглядит так

 lt;Route path="/admin" element = {lt;Admin  prod = {this.state.Product}  delete={this.deleteEntery}  editing = {this.editElement}  /gt;}/gt;  

Комментарии:

1. можете ли вы поделиться информацией об ошибке и о том, какую версию маршрутизатора react вы используете?

2. это не ошибка, она дает мне неопределенный объект, а версия react-17.0.2

Ответ №1:

Во — первых, вы не передаете «историю» в качестве поддержки компоненту администратора, если вы хотите использовать объект истории в своем компоненте, вам просто нужно будет импортировать его и использовать (не нужно передавать его в качестве поддержки).

 // Import it at the top of your file import { useHistory } from 'react-router-dom'  // Call this hook inside your functional component, history variable has all the required properties const history = useHistory()  

Комментарии:

1. Ошибка при попытке импорта: «История использования» не экспортируется из «react-router-dom». я получаю эту ошибку

2. Вам нужно использовать React gt;= 16.8, чтобы использовать любой из этих крючков! -История использования-Расположение пользователя-Параметры использования-Сопоставление пользователей

3. версия react-17.0.2. Это версия, с которой я работаю, так что я бы ее понизил ?

Ответ №2:

Вы не импортировали крючок истории использования и не объявили историю с его использованием.

Добавьте это для импорта:

 import { useHistory } from 'react-router-dom'  

вызовите историю использования внутри вашей функции, используя историю переменных:

 const history = useHistory()  

Если у вас возникла какая-либо ошибка импорта, используйте последнюю версию React, а также установите «react-router-dom» v5.2.0 с помощью этой команды: npm install 'react-router-dom@v5.2.0'

Комментарии:

1. Ошибка при попытке импорта: «История использования» не экспортируется из «react-router-dom». я получаю эту ошибку

2. Если вы должны придерживаться последней версии react-router-dom v6.0.0, замените историю использования на useNavigate. В противном случае понизьте свой react-маршрутизатор-dom до версии 5.2.0, и ваш код будет работать так, как должен.

3. версия react-17.0.2. Это версия, с которой я работаю, так что я бы ее понизил ?

4. Нет необходимости понижать рейтинг. Просто проверьте свою версию react-router-dom. Если это V6.0.0, то замените историю использования на useNavigate или понизьте react-router-dom до V5.2.0, и история использования будет работать нормально.