useEffect 钩子完成后如何渲染组件?

时间:2021-06-07 23:04:53

标签: javascript reactjs axios react-hooks components

我正在从 api 获取数据,并且我有一个存储数据的钩子。我想在 useEffect 挂钩获取数据并且数据已设置为 data 挂钩后呈现组件。我该怎么做?

编辑:在渲染组件之前我需要数据。

export const App = () => {
  const [data, setData]

  useEffect(() => {
  axios.get("/data").then((res) => setData(res.data)).catch((err) => console.log(err))
  }, [])

  return (
    <div>
      <Home />
    </div>
  )
}

3 个答案:

答案 0 :(得分:1)

你可以像下面这样

export const App = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
  axios.get("/data").then((res) => setData(res.data)).catch((err) => console.log(err))
  }, [])

  return (
    <div>
      <Home setData={setData}/> //here you can pass data to the home component and play with the data
    </div>
  )
}

答案 1 :(得分:0)

您可以根据状态有条件地渲染组件。这样它只在状态不为空时才存在。

export const App = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
  axios.get("/data").then((res) => setData(res.data)).catch((err) => console.log(err))
  }, [])

  return (
    <div>
      {data ? <Home setData={setData}/> : null } // here you can pass data to the home component
    </div>
  )
}

答案 2 :(得分:0)

您可以在渲染之前添加一个 if 语句来检查您的数据是否尚未加载到状态中,因此,如果您不希望组件渲染,则可以返回 null。

export const App = () => {
  const [data, setData] = useState(null)

  useEffect(() => {
    axios.get("/data")
      .then((response) => setData(response.data))
      .catch((error) => console.log(error))
  }, [])

  if (data === null) return null

  return (
    <div>
      <Home />
    </div>
  )
}