react пытается отобразить страницу еще до params.id извлекается, поэтому каждый раз выполняется только оператор if

#javascript #html #reactjs #react-native

#javascript #HTML #reactjs #react-native

Вопрос:

Я хочу отобразить код react, когда идентификатор в параметрах совпадает с идентификатором в данных, но здесь react пытается отобразить код еще до props.match.params.id выполнения, поэтому выполняется только оператор if, можете ли вы предоставить мне решение для решения этой проблемы.Я даже пробовал использовать useParams() , но это не дает ничего хорошего.

 import data from'./data'
import React  from 'react'



export default function Productdisplay(props) {
 
  const y= props.match.params.id
  const product=data.products.find((x) => x.id===y); //An error lies here

  if(!product){
    return(
      <div>No product to display {}</div>
    )
  }
return(
<>
//Here lies the code I want to render when the ids of the url and data  match 
but as React tries to render the code even before the params is being fetched 
only if statement is being rendered can you give me a solution for this
</>
)
}
 

Ответ №1:

То, что вы хотите использовать здесь, — это useEffect, который содержит ваши условия / логику, которая будет выполняться при изменении ее недостатков. Здесь это Y. Затем сохраните вывод вашей логики из useEffect в реальное состояние (useState), а не в const . Оттуда вы сможете запустить ожидаемый повторный рендеринг.

 import React, { useState, useEffect } from 'react';

function Productdisplay(props) {
  const [products, setProducts] = useState();

  useEffect(() => {
    const y = props ? .match ? .params ? .id;
    const findProducts = data.products.find((x) => x.id === y);

    if (findProducts !== products) {
      setProducts(products);
    }
  }, [data?.products, props?.match?.params?.id]);

  if(!products) return null; 
  return (
    <div>
      // ...
    </div>
  );
 

Я предлагаю вам прочитать это https://reactjs.org/docs/hooks-effect.html

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

1. не могли бы вы, пожалуйста, использовать useeffect и usestate в моем коде, поскольку я новичок в react, я не могу этого сделать

2. Посмотрите на мой отредактированный ответ

3. Спасибо за ваше время, но у меня все та же ошибка