我必须从一个复杂对象json中获取一些数据(在我的例子中是:valor_custo_fornecedor从detalhe对象,我怎么能做到这一点?
我已经尝试过这样的axios:
const [valorCusto, setValorCusto] = useState([]);
useEffect(() => {
axios.get('MY API LINK').then((res) => {
let valor = res.detalhe.valor_custo_fornecedor;
setValorCusto(res.valorCusto.valor_custo_fornecedor);
});
});
4条答案
按热度按时间axkjgtzd1#
在没有看到完整json的情况下,很难判断数据中存在哪些键/值对,但从我所看到的情况来看,您正在将一个似乎不存在于数据中的值传递给
setValorCusto
,即:res.valorCusto.valor_custo_fornecedor
我猜你想传递给
setValorCusto
的是上面定义的valor
变量,但是res.data.detalhe
是一个数组,你要么需要迭代,要么需要指定一个索引。另一个细节与问题本身无关,我将添加一个依赖项数组,这样就不会在每个组件重新呈现时调用这个API请求,所以最终结果看起来像这样:
注意
useEffect
调用中的第二个参数是空数组,这意味着效果只在组件的初始渲染时运行。然后,只要在组件中任何需要的地方使用
valorCusto
,就可以访问该值。edqdpe6u2#
在setValorCusto中设置响应后;你可以循环你的状态变量并得到你想要的值
yyyllmsg3#
与其他应答状态一样,从API返回的是一个对象数组。当前在代码中,该数组位于响应对象中。因此,在下面的代码片段中:
您需要指定您希望从数组中的哪一项获取 detalhe 对象(如res[0].detalhe)。
如果你想使用数组中的所有内容,一种方法是将整个数组存储在useState中,然后循环遍历数组,对其中的对象执行一些操作。
另外,如果你不完全确定状态是什么,你可以通过
<div>{JSON.stringify(valorCusto)}</div>
这样的操作把它记录到页面上dm7nw8vv4#
你可以像这样转换json: