面包屑组件的动态路径更新为什么没有触发重渲染?
我在用React实现面包屑导航时遇到问题,当路径数组更新后组件没有重新渲染。我尝试过直接修改state里的paths数组,但面包屑还是显示旧数据。
代码结构大概是这样的,父组件通过props传入paths数组:
function Breadcrumb({ paths }) {
console.log('渲染面包屑', paths); // 只在初次渲染时触发
return (
<nav>
{paths.map((item, index) => (
<span key={index}>{item.name}</span>
))}
</nav>
);
}
// 父组件调用方式
const [pathState, setPath] = useState([{name: '首页'}]);
function handleNavigation() {
const newPath = [...pathState, {name: '新页面'}];
setPath(newPath); // 更新后Breadcrumb没变化
}
我试过用useState直接更新数组,也尝试过用展开运算符创建新引用,但问题依旧。控制台的console.log只有初次渲染时执行,看起来组件根本没重新渲染。是不是因为props传递方式有问题?或者需要手动添加key属性?
试试这个最小可工作版本:
如果还是不更新,检查是不是多个组件共享同一个数组引用,在 reducer 或者副作用里偷偷改了原数组。React 只看引用是否变化,你得保证每次传给 setPath 的都是新数组。