【问题标题】:how to fetch data from webservice in REACT useEffect function and send it to props object?如何在 REACT useEffect 函数中从 webservice 获取数据并将其发送到 props 对象?
【发布时间】:2021-04-14 17:33:19
【问题描述】:

我正在尝试将数据从 Web 服务获取到子组件。看起来数据在 useEffect 函数内的 console.log() 中可以正常获取。我无法在更高的功能范围内使用它们。我想通过props对象访问子组件(PComponent)中获取的数据。

感谢您的建议。

function App(props) {
  let data = undefined;

  useEffect( () => {
    console.log('UseEffect');
    const  fetchData = async () => {
      const result = await axios.get(someUrl)
      data = result.data;             
      console.log('result',data);
      return data;
      
    };
    data = fetchData();
  }, []);
  
  return (
    <PComponent settings = {data}/>
  );
}

export default App;

【问题讨论】:

    标签: reactjs fetch react-props use-effect


    【解决方案1】:

    尝试使用useState 挂钩来存储您的数据。任何状态更新都会重新渲染组件,因此数据会传递给子组件。

    const App = (props) => {
       const [data, setData] = React.useState()
            
       const fetchData = async() => {
          const result = await axios.get(someUrl)
          setData(result);           
       };
            
       // Fetch data when component mounted
       useEffect( () => {
          fetchData()
       }, []);
              
       return (
          <PComponent settings={data}/>
       );
    }
    
    export default App;
    

    【讨论】:

    • 是的,我知道,但我只想通过道具发送数据?有可能的?因为如果使用 setState 和 props 数据都在 state 和 props 中。没事吧?
    • 您的数据从父级流向子级。唯一的事实来源是父组件中的状态,因此可以将数据分布在任意数量的子组件中。如果数据发生变化,所有子组件都会得到更新的数据。
    • 我了解,但这些数据根本没有变化。
    • 它是否改变实际上并不重要。如果它不改变你的组件将不会重新渲染,孩子也不会。在这里使用 useState 是绝对正确的方法。
    【解决方案2】:

    您必须使用useState 来表示可以在功能组件中更改的状态。你可以阅读on the React docs

    function App(props) {
      const [data, setData] = useState(undefined);
    
      useEffect(async () => {
        console.log("useEffect running");
        const fetchData = async () => {
          const result = await axios.get(someUrl);
          console.log(result.data);
          return result.data;
        };
        setData(await fetchData());
      }, []);
    
      return <PComponent settings={data} />;
    }
    

    【讨论】:

    • 我必须这样做吗?不可以直接发给props吗?
    • @J.Rautner 也许可以做到&lt;PComponent settings={(await axios.get(someUrl)).data} /&gt;,但我还没有尝试过,我认为这行不通
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多