父组件 -- <App />
子组件1 -- <Header />
子组件2 -- <Body />
需求:在子组件1中更新user的值,子组件2渲染相应的数值
父子组件之间传参:通过props传递
兄弟组件:子组件1通过参数方法穿参给父组件,父组件再通过props传递给子组件2
// App.js
import React from "react"
import Header from "./Header"
import Body from "./Body"
export default function App() {
const [user, setUser] = React.useState("")
const handleUser = (user) => {
setUser(user)
}
return (
<main>
<Header handleUpdate={handleUser}/>
<Body user={user}/>
</main>
)
}
// Header.js
import React from "react"
export default function Header(props) {
/**
* Challenge:
* Raise state up a level and pass it down to both the
* Header and Body components through props.
*/
const user = "Name1"
// 将value传给副组件
React.useEffect(() => {
props.handleUpdate(user)
}, [user])
return (
<header>
<p>Current user: {user}</p>
</header>
)
}
// Body.js
import React from "react"
export default function Body(props) {
return (
<section>
<h1>Welcome back, {props.user}!</h1>
</section>
)
}
useEffect的作用: 只有当<Header />组件中user值发生变化才会触发props.handleUpdate. 否则console会有 “How to fix the "cannot update a component while rendering a different component" error in React” 报错