【发布时间】:2021-01-29 06:19:38
【问题描述】:
我正在尝试在子组件中呈现实际数据,但数据没有呈现。怎么了?
父组件
const UserPanelContainer = ({ currentUser }) => {
const [initUsersData, setinitUsersData] = useState(currentUser);
useEffect(() => {
console.log('useEffect')
setinitUsersData(()=>getnewData())
}, [setinitUsersData, currentUser])
const getnewData = () =>{
console.log('getnewData')
setinitUsersData(currentUser)
}
return (
<UserPanel currentUser={initUsersData} hanleOnClickOut={hanleOnClickOut} >{console.log('usepanContainerRender')}</UserPanel>
);
};
export default UserPanelContainer;
孩子
const UserPanel = ({ currentUser, hanleOnClickOut }) => {
console.log(currentUser);
return (
<div className="dropdown">
{console.log('userPanelRender')}
<button
className="btn btn-secondary dropdown-toggle"
type="button"
id="dropdownMenuButton"
data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
>
<img
className="avatar"
src={currentUser.photoURL}
alt="avatar"
/>
{currentUser.displayName}
</button>
<div className="dropdown-menu" aria-labelledby="dropdownMenuButton">
<div className="dropdown-item">
Вошел как {currentUser.displayName}
</div>
<div className="dropdown-item" onClick={hanleOnClickOut}>
Выйти
</div>
</div>
</div>
);
};
export default UserPanel;
在子控制台中,我可以在道具中看到正确的实际数据,但它们没有被渲染。 实际数据包含“currentUser”道具。但是在浏览器页面上我看不到数据.... (如果我从 useEffect depencity 中删除 currentUser,我可以看到来自 previus API 调用的数据)
【问题讨论】:
-
当他们的道具改变时,孩子们不会更新。你必须使用他们的状态。在 state 中添加 props 数据并在需要时更改 state,这将更新组件
-
当你控制台子组件时你得到了什么?
-
@Woops 他们实际上会在道具更改时重新渲染
-
@ 哎呀,如果你的意思是这样的话 - 也不行 const [initUsersDatainChild, setinitUsersDatainChild] = useState(''); useEffect(() => { console.log('useEffect') setinitUsersDatainChild(currentUser) }, [ currentUser])
-
@Garsivirus - 我得到了渲染的实际数据