我如何解决令人困惑的React错误的快速指南
在React / Next.js应用程序上工作时,出现此错误:
Cannot update a component (`App`) while rendering a different componentI researched a bit how to solve this problem, but there was a lot of confusion in the material I found.
Here is what I was doing: I had a centralized state managed in the App component:
function MyApp({ Component, pageProps }) {
const [lessonsRead, setLessonsRead] = useState()
return (
<Component
lessonsRead={lessonsRead}
setLessonsRead={setLessonsRead}
{…pageProps}
/>
)
}
and in a Next.js page component I called setLessonsRead
to populate this state with data, based on the result of a SWR (fetch) call:
if (courseData && courseData.lessonsRead) {
setLessonsRead(courseData.lessonsRead)
}
I was doing this right inside the component.
To solve this problem I had to wrap this code in useEffect, to only run it when the data changed and not on every component props update:
useEffect(() => {
if (courseData && courseData.lessonsRead) {
setLessonsRead(courseData.lessonsRead)
}
}, [courseData])
Download my free React Handbook
More react tutorials:
- A React simple app example: fetch GitHub users information via API
- Build a simple counter with React
- VS Code setup for React development
- How to pass props to a child component via React Router
- Create an app with Electron and React
- Tutorial: create a Spreadsheet using React
- The roadmap to learn React
- Learn how to use Redux
- Getting started with JSX
- Styled Components
- Introduction to Redux Saga
- Introduction to React Router
- Introduction to React
- React Components
- The Virtual DOM
- React Events
- The React State
- React Props
- The React Fragment
- The React Context API
- React PropTypes
- React concepts: declarative
- React: How to show a different component on click
- How to loop inside React JSX
- Props vs State in React
- Should you use jQuery or React?
- How much JavaScript you need to know to use React?
- Introduction to Gatsby
- How to reference a DOM element in React
- Unidirectional Data Flow in React
- React Higher Order Components
- React Lifecycle Events
- React Concept: Immutability
- React Concept: Purity
- Introduction to React Hooks
- Introduction to create-react-app
- React Concept: Composition
- React: Presentational vs Container Components
- Code Splitting in React
- Server Side Rendering with React
- How to install React
- CSS in React
- Using SASS in React
- Handling Forms in React
- React StrictMode
- React Portals
- React Render Props
- Testing React components
- How to pass a parameter to event handlers in React
- How to handle errors in React
- How to return multiple elements in JSX
- Conditional rendering in React
- React, how to transfer props to child components
- How to get the value of an input element in React
- How to use the useState React hook
- How to use the useCallback React hook
- How to use the useEffect React hook
- How to use the useMemo React hook
- How to use the useRef React hook
- How to use the useContext React hook
- How to use the useReducer React hook
- How to connect your React app to a backend on the same origin
- The Reach Router Tutorial
- How to use the React Developer Tools
- How to learn React
- How to debug a React application
- How to render HTML in React
- How to fix the `dangerouslySetInnerHTML` did not match error in React
- How I fixed an issue with a React login form state and Browser autofill
- How to configure HTTPS in a React app on localhost
- How to fix the "cannot update a component while rendering a different component" error in React
- Can I use React hooks inside a conditional?
- Using useState with an object: how to update
- How to move around blocks of code with React and Tailwind
- React, focus an item in React when added to the DOM
- React, edit text on doubleclick