代码之家  ›  专栏  ›  技术社区  ›  Parth Chitroda

无法读取未定义的属性“displayName”。反应+玩笑+酶

  •  0
  • Parth Chitroda  · 技术社区  · 3 年前

    我正在渲染react组件 App.tsx 哪个用 useEffect 钩里面 使用效果 ,它进行异步调用以更新状态 delivery 定义于 应用程序。tsx .一开始, 传送 未定义,但在下次重新渲染后,将定义它。

    const App = () => {
      const [delivery, setDelivery] = useState(null)
      const [loading, setLoading] = useState(true)
    
      useEffect(() => {
        setup()
      }, [])
    
      const setup = async () => {
        try {
          const response = await someAsyncCall()
          setDelivery(response)    
          setLoading(true)
        /// Other functionality
        } catch (err) {
          console.log(err)
        }finally{
            setLoading(false)
        }
        
      }
      return (
          <>
          {loading? <div>Loading!!</div>
            : <div>App has loaded with {delivery.displayName} {delivery.id}</div>  
        }
          </>
      )
    }
    

    如何编写单元测试,使其以正确的值重新呈现?现在我明白了 Uncaught [TypeError: Cannot read property 'displayName' of undefined]

    单元测试我写道:

    describe('test', ()=>{
        it("mounts", ()=>{
           const wrapper =  mount(<App />)
        })
    })
    

    有没有关于如何重新渲染的想法?我读了 wrapper.update() 可以使用。我在想怎么做?

    1 回复  |  直到 3 年前
        1
  •  0
  •   priosshrsth    3 年前

    这难道不能解决问题吗?

    return (
      <>
        {loading || !delivery ? <div>Loading!!</div>
          : <div>App has loaded with {delivery.displayName} {delivery.id}</div>  
            }
      </>
    )