Ответы пользователя по тегу Redux
  • Почему не загружается страница React?

    The_Sketch
    @The_Sketch
    Веб разработчик x)
    Возможно, проблема заключается в необходимости оптимизации вашего кода. Например, при каждом изменении в любом компоненте вам нужно проверять, что компоненты, которые зависят от этой измененной переменной, должны перерендериваться или нет. Для того, чтобы сделать это эффективно, вам может понадобиться переместить свою функцию `getSourse` на уровень выше, чтобы она не вызывалась при каждом изменении состояний.

    Кроме того, вам необходимо учесть состояние компонента `PeoplePage` между переходами. Если вы вернетесь на страницу `PeoplePage`, то предыдущие данные будут сохранены, и при переходе на другой `PersonPage` без перезагрузки страницы они будут использоваться заново. Чтобы решить эту проблему, вы можете очистить данные в компоненте `PeoplePage` при каждом переходе на другой `PersonPage`.

    Например, это можно сделать, обнулив значения `prevPage`, `nextPage`, `people` и `counterPage` в компоненте `PeoplePage` с помощью вычисляемых свойств, и они будут автоматически обновляться при каждом переходе на другую страницу. Вот пример такого кода:

    const PeoplePage = () => {
      const query = useQueryParams()
      const queryPage = query.get('page')
    
      const [prevPage, setPrevPage] = React.useState(null)
      const [nextPage, setNextPage] = React.useState(null)
      const [people, setPeople] = React.useState([])
      const [counterPage, setCounterPage] = React.useState(parseInt(queryPage || "1"))
      const [error, setError] = React.useState(false)
    
      React.useEffect(() => {
        setPeople([])
        setError(false)
        const getSourse = async (url) => {
          const res = await getApiJson(url);
          if (res?.results) {
            const peopleList = res.results.map(({ name, url }) => {
              const id = getId(url)
              const img = getFullSourse(id)
              return ({ name, url, img })
            })
            setPrevPage(res.previous)
            setNextPage(res.next)
            setPeople(peopleList)
            setCounterPage(getPeoplePageId(url))
          } else {
            setError(true)
          }
        }
        getSourse(API_PEOPLE + queryPage)
      }, [queryPage])
    
      ...


    Это позволит вам сохранить текущие данные, необходимые для отображения на странице `PeoplePage`, и перейти на другую страницу `PersonPage` без проблем. Также будьте уверены, что вы используете ключи для каждого элемента, возвращаемого в компонентах, чтобы React мог инвалидировать этот элемент при его удалении.
    Ответ написан