1. element vs Component
Before: element format
ReactDOM.render(<App />, appDOM) const app = ( <div> <Title>{counter}th cat meme</Title> <CatForm handleFormSubmit={handleFormSubmit} /> <MainCard img="https://cataas.com/cat/595f280b557291a9750ebf65/says/JavaScript" /> <Favorites /> </div> ); const appDOM = document.querySelector('#app'); ReactDOM.render(app, appDOM)
After: Component format
If you want to add useState or functions inside
app
, it has to be changed from javascript element to React Component. This would frequently happen when you are changing codes to lift state up.The last code should be changed like this :
ReactDOM.render(<App />, appDOM)
If you write App
only, like you're calling the name of element, not Component, this error message would pop up:
Warning: Functions are not valid as a React child. This may happen if you return a Component instead of from render. Or maybe you meant to call this function rather than return it.
const App = () { const [counter, setCounter] = React.useState(100); function handleFormSubmit() { // function } return( <div> <Title>{counter}th cat meme</Title> <CatForm handleFormSubmit={handleFormSubmit} /> <MainCard img="https://cataas.com/cat/595f280b557291a9750ebf65/says/JavaScript" /> <Favorites /> </div> ) }; const appDOM = document.querySelector('#app'); ReactDOM.render(<App />, appDOM)
2. Each child in a list should have a unique key prop.
Warning: Each child in a list should have a unique "key" prop.
Check the render method of
Favorites
. See https://reactjs.org/link/warning-keys for more information.
at CatItem (:70:45)
at Favorites
at div
at App (:99:31)
Before:
<ul className="favorites"> { cats.map(cat => <CatItem img={cat} />) } </ul>
After:
<ul className="favorites"> { cats.map(cat => <CatItem img={cat} key={cat} />) } </ul>
3. How to add a new item to a list that is created by useState
Use es6 Spread Operator
function Favorites() { const [favorites, setFavorites] = React.useState([CAT1, CAT2]) function handleHeartClick() { console.log("Clicked Heart."); // add cat to the list setFavorites([...favorites, CAT3]) } }
Top comments (0)