【发布时间】:2020-12-17 15:25:09
【问题描述】:
在阅读了 useState 和 useEffect 的文档后,我无法弄清楚我在这里做错了什么...我尝试在单击选项卡时使用更新的标题动态更新我的 h1 标题,但是状态不会更新所以我的标题不会重新呈现。
这是我的子标题组件,它接收一组对象作为道具。这些对象被迭代并用于填充子导航栏。 (按预期工作)。
const Subheader = (props) => {
const {
submenuItems = []
} = props;
// State
const [pageTitle, setPageTitle] = useState(submenuItems[0].name); //Sets starting value as the first item of my submenu which is also the default route so works as intended.
const handleMenuItemClick = (name) => {
setPageTitle(name)
console.log(name) //This prints out the updated expected value
console.log(pageTitle) //This prints out the original not updated value
}
const submenuItemsJSX = submenuItems.map((item, index) => {
return (
<li
key={index}
to={item.to}
onClick={() => handleMenuItemClick(item.name)}
>
<a>
{item.name}
</a>
</li>
)
});
useEffect(() => {
console.log(pageTitle) //This prints out the original not updated value
}, [pageTitle])
return (
<div>
<div>
<h1>
{pageTitle} //This is what i want to update
</h1>
</div>
<div>
<ul>
{submenuItemsJSX}
</ul>
</div>
</div>
)
}
export default Subheader
通过 subMenuItems 输入的示例:
{name: 'Categories', to: '/settings/categories', buttons: [] }
【问题讨论】:
-
还注意到
const [selected?它根本无法更改,因为它是const。 -
const 没问题,请检查如何在反应钩子中使用状态 - reactjs.org/docs/hooks-state.html @EmileBergeron
-
您对
console.log的困惑是否只有@William 的评论涵盖...或者您实际上对打印的pageTitle值有一些问题? -
然后
pageTitle将在渲染中更新。
标签: reactjs react-hooks use-effect use-state