【问题标题】:React not reading 'userData' in ternary operator反应不在三元运算符中读取'userData'
【发布时间】:2021-11-07 08:40:45
【问题描述】:

我正在使用 React 尝试从提供随机用户信息的 api 中提取数据。如果 userData == null,我需要返回“No user”,如果不是,则返回用户名和电子邮件。我正在尝试使用三元运算符来解决这个问题,但 React 一直希望我传播 userData。如果我这样做,它会继续告诉我 userData 没有定义。我是 React 新手,不知道该怎么做。有人可以给我一些见解吗?这是我的代码

import {useState, useEffect} from 'react'
import axios from 'axios'
import './App.css'
import UserSummary from './UserSummary.jsx'

function App() {
  const [user, setUser] = useState([])

  useEffect(() => {
    async function fetchUser() {
      const currentUser = `https://api.randomuser.me/`
      try {
        const res = await axios.get(currentUser)
        console.log(res.data)
        setUser(res.data)
      } catch (error) {
        console.log(error)
      }
    }
    fetchUser()
  }, [])

  return (
    <div className="App">
      <h1>Who's That User?</h1>
      <UserSummary 
        userData={'currentUser'} 
        {userData === null ? <h3>There is no user</h3> : <h3>{userData.name, userData.email}</h3>}
      />
    </div>
  );
}

export default App;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

import {useState} from 'react'
import React from 'react'

function UserSummary(props) {
   const {userData} = props
   return (
      <div></div>
   )
}

export default UserSummary
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

【问题讨论】:

    标签: reactjs api async-await axios conditional-operator


    【解决方案1】:

    好吧,userData 未定义,您的状态变量称为user。然后您执行 userData={'currentUser'} ,它将该组件中的 userData 属性设置为 string "currentUser" - 如果将其初始化为 null,然后将其设置为您得到的响应(假设响应类似于{ name: '', email: '' },并且实际上传递了该变量,然后它应该可以工作。像这样的东西:

    import {useState, useEffect} from 'react'
    import axios from 'axios'
    import './App.css'
    import UserSummary from './UserSummary.jsx'
    
    function App() {
      const [user, setUser] = useState(null)
    
      useEffect(() => {
        async function fetchUser() {
          const currentUser = `https://api.randomuser.me/`
          try {
            const res = await axios.get(currentUser)
            console.log(res.data)
            setUser(res.data)
          } catch (error) {
            console.log(error)
          }
        }
        fetchUser()
      }, [])
    
      return (
        <div className="App">
          <h1>Who's That User?</h1>
          <UserSummary 
            userData={user} 
            {user === null ? <h3>There is no user</h3> : <h3>{user.name, user.email}</h3>}
          />
        </div>
      );
    }
    
    export default App;
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

    import {useState} from 'react'
    import React from 'react'
    
    function UserSummary(props) {
       const {name, email} = props
       return (
          <div></div>
       )
    }
    
    export default UserSummary
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

    【讨论】:

      【解决方案2】:

      您将错误的道具传递给 UserSummary 组件。

      应该是这样的

      function App() {
        const [user, setUser] = useState([])
      
        useEffect(() => {
          async function fetchUser() {
            const currentUser = `https://api.randomuser.me/`
            try {
              const res = await axios.get(currentUser)
              console.log(res.data)
              setUser(res.data)
            } catch (error) {
              console.log(error)
            }
          }
          fetchUser()
        }, [])
      
        return (
          <div className="App">
            <h1>Who's That User?</h1>
            <UserSummary 
              userData={'currentUser'}
              isUserValid={Boolean(userData.length)} 
            />
          </div>
        );
      }
      
      export default App;
      
      
      import { useState } from "react"
      import React from "react"
      
      function UserSummary(props) {
          const { userData, isUserValid } = props
          return (<div>
              {!isUserValid && (
      
                  "User is not present"
              )}
      
              {isUserValid && (
      
                  <h3> user.email </h3>
                  <h3> {user.name} </h3>
              )}
              </div>)
      
      export default UserSummary
      

      【讨论】:

        猜你喜欢
        • 2019-07-19
        • 2018-04-11
        • 2021-09-09
        • 2018-11-19
        • 2017-11-13
        • 2018-01-26
        • 1970-01-01
        • 2021-04-19
        • 1970-01-01
        相关资源
        最近更新 更多