reactjs - 对象在 useState 钩子 React
问题描述
我有一个 websocket 连接,ws 传递对象,我需要访问对象并将其值作为道具传递,以便我可以在其他组件中使用它们。
const client = new W3CWebSocket("ws://QWERTY:9080/user");
export default function App() {
const [object, setObject] = useState("");
useEffect(() => {
client.onopen = () => {
console.log("Connected");
};
client.onmessage = (e) => {
const newObj = JSON.parse(e.data);
setObject(newObj);
console.log(newObj);
};
client.onclose = () => {
console.log("Closed...");
};
return () => {
}
}, [])
return (
<div className="App">
<Navbar />
{Object.keys(object).map((objKey, index) => (
<div key={index}>
<p> {objKey} : {object[objKey]}</p>
</div>
))}
<DataTable object = { object } />
</div>
);
}
我正在尝试在浏览器上显示对象值。但我收到以下错误"Error: Objects are not valid as a React child"
Websocket 给出了这个对象:{Snapshot: {Name: "AppInfo", DataHeader: Array(24), Data: Array(47)}}
解决方案
问题出在您使用useState钩子的位置,因为您传递的状态中的初始值是字符串类型,并且您正在设置对象类型的状态,所以像下面这样更改代码它将起作用:-
const client = new W3CWebSocket("ws://QWERTY:9080/user");
export default function App() {
const [object, setObject] = useState(); // here pass null value or default object type value
useEffect(() => {
client.onopen = () => {
console.log("Connected");
};
client.onmessage = (e) => {
const newObj = JSON.parse(e.data);
setObject(newObj);
console.log(newObj);
};
client.onclose = () => {
console.log("Closed...");
};
return () => {
}
}, [])
return (
<div className="App">
<Navbar />
{object && Object.keys(object).map((objKey, index) => ( // add null check over here.
<div key={index}>
<p> {objKey} : {object[objKey]}</p>
</div>
))}
<DataTable object = { object } />
</div>
);
}
推荐阅读
- javascript - React axios 编译失败
- javascript - JS - 将数组从一个文件导出到另一个文件
- c# - 在 swagger 模型模式中隐藏 DTO 字段,但在响应 json 中显示这些字段
- javascript - 如何将此请求发送到另一台主机?
- xcode - Xcode - thread_policy_set(1) 返回 46
- android - Haxe - 未捕获的异常 - load.c(237):无法加载库:/home/user/haxelib/lime/7,9,0//ndll/Linux64/lime.ndll
- r - 无法在 Zeppelin Docker 中安装 R 包
- rust - 如何启动底层区块链作为测试网络?
- javascript - JSPLUMB:在特定用户交互后禁用节点拖放
- reportportal - 我们如何在报告门户中启用 Active Directory 授权?