javascript - 当我们从函数返回对象时,为什么不打印变量?
问题描述
我做了一个自定义钩子,我返回一个状态。当我从自定义钩子返回一个对象时,它不会打印状态值,但是当我返回一个将状态作为其第一个元素的数组时,它会打印一个值。
这是我的代码:
import React from "react";
import axios from "axios";
export default () => {
const [state, setState] = React.useState([]);
const fetchData = async () => {
const res = await axios.get("https://5os4e.csb.app/data.json");
setState(res.data);
};
React.useEffect(() => {
(async () => {
await fetchData();
})();
}, []);
// i am returning a object
return { state };
};
像这样使用:
export default function App() {
const { st } = useTabData();
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
{JSON.stringify(st, null, 2)}
</div>
);
}
为什么st
不打印价值?当我返回一个数组时打印它。
https://codesandbox.io/s/sweet-meadow-9l41z?file=/src/App.js:89-276
解决方案
您需要以几种方式编写代码
第一种方式 - 你破坏你的状态
const { state:st } = useTabData();
第二种方式 - 直接调用函数
{JSON.stringify(useTabData().state, null, 2)}
您的传递和访问变量名称应该相同,或者您可以使用像第一步这样的解构来更改变量名称。
推荐阅读
- node.js - AWS Lambda 和 SQL Server 与 node.js 代码的集成
- c# - DOtNetDuke 模块缺少参考错误(Christoc 模块)
- azure-active-directory - Javascript(script) 标记在 login.microsoftonline.com 域中不可用
- html - vuetify v-icon 的问题
- mongodb - MongoDB找到用户同时拥有的地方
- sql - 我有一列包含许多空值,我想根据条件将它们替换为同一列中的值
- android - OnTouch Listener 移除 CardView 上的圆角
- java - 为什么我的子类不继承其超类的私有实例变量?
- javascript - React-native 在指定的时间长度内运行一个函数
- node.js - 如何在heroku上使用反应路线?