reactjs - 更新从变量渲染的反应元素的道具
问题描述
状态变量中存储了一个反应组件。我附上了一个示例代码并创建了一个代码框示例。如您所见,nameBadgeComponent
应该显示{name}
状态字段。它适用于默认值,但不会对name
变量的变化做出反应。有没有办法让它在不更新nameBadgeComponent
自身的情况下工作?
const [name, setName] = useState("DefaultName");
const [nameBadgeComponent] = useState(<h2>My name is: {name}</h2>);
return (
<div className="App">
{nameBadgeComponent}
<button
onClick={() => {
const newName = Math.random()
.toString(36)
.substring(3);
console.log("Renamed to:", newName);
setName(newName);
}}
>
rename
</button>
</div>
);
解决方案
您不能从 useState 创建组件。状态是定义组件处于何种状态/外观/等的所有属性和数据。useState 允许控制一条信息或数据,但不响应更改,组件会。
您在名称中添加“组件”这一事实应该会给您一个提示;)
你想要做的可能是这样的:
function NameBadgeComponent({ name }) {
return <h2>My name is: {name}</h2>;
}
export default function App() {
const [name, setName] = useState("DefaultName");
return (
<div className="App">
<NameBadgeComponent name={name} />
<button
onClick={() => {
const newName = Math.random()
.toString(36)
.substring(3);
console.log("Renamed to:", newName);
setName(newName);
}}
>
rename
</button>
</div>
);
}
这将正确更新名称的更改。
推荐阅读
- database - 在数据库更新过程中绕过缓存
- ios - Xcode 上不同的编译时间 - clang
- hibernate - 查询获取 HQL 中特定列的计数
- php - 显示经纬度的地图不起作用
- c# - 以下需要正则表达式
- visual-studio-code - 为什么一对括号内的单词被视为vsvim中的单词?
- r - 使用梯度和 hessian 矩阵手动计算 pglm 的稳健标准误差
- php - symfony CollectionType -> 如何在没有任何实体的情况下手动向 CollectionType 添加字段?
- html - 如何将动画图片放置在固定矩形内?
- python - 如何使矩形透明?