React原生Axios在多个页面上显示响应

bvjveswy  于 2023-08-04  发布在  iOS
关注(0)|答案(2)|浏览(118)

在我的API.js上,我有这个代码来调用API JSON。

import { View, Text,Button, FlatList } from 'react-native';
import React, { useState } from 'react';
import axios from 'axios';

export default function APIs() {
  const [data, setData] = useState([]);
  const baseURL = 'https://jsonplaceholder.typicode.com';

  const getAPI = () => {
    axios({
      method: 'GET',
      url: `${baseURL}/posts`,
    })
    .then(res => console.log(res.data))
    .catch(err => console.log(err));

  };
}

字符串
我怎么能在几页纸上显示对此的响应?假设在Home.js上我想显示“id”,然后在title上我想显示“title”。我的意思是,我如何调用并显示在多个页面上的部分,每个部分在不同的页面上?

9cbw7uwe

9cbw7uwe1#

让它成为一个钩子:

import {View, Text,Button, FlatList} from 'react-native';
import React, {useState} from 'react';
import axios from 'axios';

export default function useApiHook({page}) {
  const [data, setData] = useState([]);
  const baseURL = 'https://jsonplaceholder.typicode.com';

  const getAPI = (location, controller) => {
    axios({
      method: 'GET',
      url: `${baseURL}/${location}`,
      signal: controller.signal,
    })
    .then(res => setData(res.data))
    .catch(err => console.log(err));

  };

  useEffect(() => {
     const controller = new AbortController();
     getApi(page, controller);
     
     return () => controller.abort();
  }, [page])
  
  return data;
}

字符串
在单个页面中使用:

const Home = () => {
  const response = useApiHook({page: 'id'});
  console.log(response);
}

const Title = () => {
  const response = useApiHook({page: 'title'});
  console.log(response);
}


react-doc

p3rjfoxz

p3rjfoxz2#

如果你的<Home /><Title />组件有一个共同的祖先(在下面的代码片段中是<App />),那么这个组件可以获取所需的数据,存储它,然后通过props将每个所需的片段发送到相应的子组件。
下面的代码片段展示了一个简单的示例,其中<App />组件获取数据,然后将第一个元素的ID发送到<Home />,并将标题发送到<Title />

const { useState, useEffect } = React;

function Home(props) {
  return (
    <div>1st item ID: {props.firstItemID}</div>
  );
}
function Title(props) {
  return (
    <div>1st item title: {props.firstItemTitle}</div>
  );
}
function App() {
  const [posts, setPosts] = useState([]);

  useEffect(() => {
    axios.get('https://jsonplaceholder.typicode.com/posts')
      .then(response => setPosts(response.data));
  }, []);

  return (
    <div>
      <Home firstItemID={(posts[0] || {}).id} />
      <Title firstItemTitle={(posts[0] || {}).title} />
    </div>
  );
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);

个字符

相关问题