редукса useEffect и useDispatch не работает (максимальный стек вызовов)? - PullRequest
0 голосов
/ 28 января 2020

Я новичок в перехвате хуков и реагировании хуков, и это мой код, который не останавливает рендеринг?

const App: React.FC = () => {
  const dispatch = useDispatch();
  const [page, setPage] = useState(1);
  const fetchUsers = async (page: number) => {
    dispatch({
      type: FETCH_USERS_REQUEST,
      payload: { page }
    });
    try {
      const { data, ...result } = await api.fetchUsers(page);
      const user = new schema.Entity('data');
      const users = normalize(
        { users: data },
        {
          users: [user]
        }
      );
      dispatch({
        type: FETCH_USERS_SUCCESS,
        payload: {
          ...result,
          users
        }
      });
    } catch (error) {
      dispatch({ type: FETCH_USERS_FAILURE, payload: { error } });
    }
  };
  useEffect(() => {
    fetchUsers(1);
  }, [fetchUsers]);
  const users = useSelector((state: RootState) => state.users);
  console.log('asd', users);
  return (
    <div className="vh-100 vw-100">
      <header>Users</header>asdasd
    </div>
  );
};

fetchUsers - это асинхронный c метод, который я планирую использовать несколько раз на loadMore и нумерация страниц, однако, это не работает, как мне заставить это работать?

1 Ответ

2 голосов
/ 28 января 2020

Ваши fetchUsers изменяются при каждом повторном отображении, которое включает ваш useEffect с этим извлечением для запуска.

Попробуйте это:

  useEffect(() => {
    fetchUsers(pageNumber);
  }, [pageNumber]);
...