Переходное состояние со ссылкой

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

<td>
   <Link to = {{pathname:"user/"+id, state:{user_url:item.url} }} >{item.name}</Link>
</td>

Это перенаправит на мой компонент user_detail,

export default class User_Details extends React.Component {

    constructor(props){
        super(props);
        this.state = {
            error : null,
            isloading: true,
            user_detail : null,
            user_url : null

        };
        if (this.props.location.state){
            this.state.user_url =this.props.location.state.user_url
        }
    }

Пользователь может получить доступ к этому компоненту user_detail по ссылке перенаправления или просто по URL-адресу, если он попадет туда по ссылке перенаправления, то мне не нужно получать user_url из, потому что он сохраняется в состоянии. Однако, если пользователь использует ссылку, у которой нет состояния, мне сначала нужно получить ссылку.

Это работает, однако я продолжаю получать предупреждение об ошибке, если использую ссылку перенаправления:

index.js:1446 Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method. in User (created by Context.Consumer)

Как бы я смог решить эту проблему?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
718
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы не можете манипулировать состоянием таким образом, я бы посоветовал вам использовать setState в componentDidMount вот так

    componentDidMount() {
      if (this.props.location.state){
               this.setState({
                 user_url: this.props.location.state.user_url
               });
      }
   }

спасибо за отзыв, я не знал о функциях componentDidMount и обновлении в ответ, я сделал это в функции рендеринга, которая неверна и продолжает рендеринг.

swaffelay 06.04.2019 19:03

как сказал пользователь Rishabh Rawat, мне пришлось использовать функцию componentDidMount, здесь я сделал асинхронный вызов, но вместо установки состояния с помощью функции setstate, если был передан аргумент user_link, я сделал this.state.user_link = this.prop .location.state.user_link. Не SetState, потому что это иногда задерживается, что вызывает некоторые сбои.

Вы никогда не должны изменять состояние напрямую, как это, setState - это асинхронная функция, если есть некоторые сбои, возможно, вам следует предоставить некоторые проверки для вашего приложения, которые вызывают сбои.

Rishabh Rawat 07.04.2019 11:23

Другие вопросы по теме