【问题标题】:Customize the Api response and use it later on other React components自定义 Api 响应并稍后在其他 React 组件上使用它
【发布时间】:2020-06-30 09:33:41
【问题描述】:

我来自 Angular 背景,刚开始使用 React.js。这个问题对你们来说可能很容易,但是在架构方面,我需要一个好的解决方案。

从 API 获得 json 响应后,我想修改响应,然后将其保存在某个地方,这样我就可以在多个组件上使用修改后的响应。 (Json 修改不是问题,我想知道,存储响应的最佳解决方案是什么,然后在哪里修改响应,然后在哪里存储以便其他组件可以使用它的修改版本。我不是使用 redux。)

例如,如果我从 axios api 得到以下响应

{
  "name":"John",
  "age":30,
  "cars": [
    { "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
    { "name":"BMW", "models":[ "320", "X3", "X5" ] },
    { "name":"Fiat", "models":[ "500", "Panda" ] }
  ]
 }

我想先修改一下

{
  "name":"John",
  "age":30,
  "cars": [
    { "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
    { "name":"BMW", "models":[ "320", "X3", "X5" ] },
    { "name":"Fiat", "models":[ "500", "Panda" ] }
  ],
  "newparameter": [
    { "name":"fdf" }
    
  ]
 }

修改后,我想将其保存为任何服务或其他内容。所以我可以稍后在其他组件上使用它,而不管组件之间没有关系。

【问题讨论】:

  • 只是bike 属性复制了car 属性吗?
  • json修改不是问题,我已经编辑过了,所以不会造成任何混乱,

标签: json reactjs api axios


【解决方案1】:

Json 修改不是问题,我想知道,存储响应的最佳解决方案是什么,然后在哪里修改响应,然后在哪里存储,以便其他组件可以使用它的修改版本。我没有使用 redux

你可以提升状态,使用状态管理器(redux)或反应上下文,这里是一个上下文的例子

const DataContext = React.createContext();
const DataProvider = ({ children }) => {
  const [dataResult, setDataResult] = React.useState({
    loading: true, //not using error as well
  });
  //fetch the data when the application loads
  React.useEffect(() => {
    setTimeout(
      () =>
        setDataResult({ loading: false, data: [1, 2, 3] }),
      2000
    );
  }, []);
  return (
    <DataContext.Provider value={dataResult}>
      {children}
    </DataContext.Provider>
  );
};

const data = ['a', 'b', 'c', 'd'];
function App() {
  const { loading, data } = React.useContext(DataContext);
  return (
    <div>
      {loading ? (
        'loading'
      ) : (
        <pre>{JSON.stringify(data, undefined, 2)}</pre>
      )}
    </div>
  );
}

ReactDOM.render(
  <DataProvider>
    <App />
  </DataProvider>,
  document.getElementById('root')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>


<div id="root"></div>

【讨论】:

  • 同时使用上下文传递大量 api 响应数据是一种好习惯吗?
  • @Nimishgoel 如果您担心数据量,那么您可以对其进行分页。在示例中,我在应用程序加载时加载数据,但您可以在上下文中提供将基于查询/页面获取数据的函数。
猜你喜欢
  • 1970-01-01
  • 2018-04-01
  • 2019-06-13
  • 2015-04-04
  • 2021-05-28
  • 2021-12-15
  • 1970-01-01
  • 2020-04-24
  • 2021-02-01
相关资源
最近更新 更多