reactjs 我如何在react中从json获得一个对象?

t0ybt7op  于 2023-02-04  发布在  React
关注(0)|答案(4)|浏览(243)

我必须从一个复杂对象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);
  });
});
axkjgtzd

axkjgtzd1#

在没有看到完整json的情况下,很难判断数据中存在哪些键/值对,但从我所看到的情况来看,您正在将一个似乎不存在于数据中的值传递给setValorCusto,即:res.valorCusto.valor_custo_fornecedor
我猜你想传递给setValorCusto的是上面定义的valor变量,但是res.data.detalhe是一个数组,你要么需要迭代,要么需要指定一个索引。
另一个细节与问题本身无关,我将添加一个依赖项数组,这样就不会在每个组件重新呈现时调用这个API请求,所以最终结果看起来像这样:

const [valorCusto, setValorCusto] = useState([]);

useEffect(() => {
  axios.get('MY API LINK').then((res) => {
    const valor = res.data.detalhe.map((detalheItem) => {
        return detalheItem.valor_custo_fornecedor;
    });

    setValorCusto(valor);
  });
}, []);

注意useEffect调用中的第二个参数是空数组,这意味着效果只在组件的初始渲染时运行。
然后,只要在组件中任何需要的地方使用valorCusto,就可以访问该值。

edqdpe6u

edqdpe6u2#

在setValorCusto中设置响应后;你可以循环你的状态变量并得到你想要的值

yyyllmsg

yyyllmsg3#

与其他应答状态一样,从API返回的是一个对象数组。当前在代码中,该数组位于响应对象中。因此,在下面的代码片段中:

axios.get('MY API LINK').then((res) => {
    let valor = res.detalhe.valor_custo_fornecedor;

您需要指定您希望从数组中的哪一项获取 detalhe 对象(如res[0].detalhe)。
如果你想使用数组中的所有内容,一种方法是将整个数组存储在useState中,然后循环遍历数组,对其中的对象执行一些操作。
另外,如果你不完全确定状态是什么,你可以通过<div>{JSON.stringify(valorCusto)}</div>这样的操作把它记录到页面上

export default function App() {
  const [valorCusto, setValorCusto] = useState(null);

  useEffect(() => {
    const getData = async () => {
      const res = await axios.get("API");
      const data = await res.data;
      setValorCusto(data);
    };
    getData();
  }, []);
  return (
    <main>
      <div>
        {valorCusto.map((item) => {
          <div>{item.id}</div>;
        })}
      </div>
    </main>
  );
}
dm7nw8vv

dm7nw8vv4#

你可以像这样转换json:

useEffect(() => {
  axios.get('MY API LINK').then((res) => {
    let obj = JSON.parse(res.detalhe.valor_custo_fornecedor)
  });
});

相关问题