代码之家  ›  专栏  ›  技术社区  ›  David Apple

如何在返回JSX之前访问SolidJS组件中提取的资源?

  •  0
  • David Apple  · 技术社区  · 3 年前

    我的SolidJS组件从服务器获取一个JSON对象,我了解如何使用返回的JSX来渲染它。

    但是,在返回JSX之前,我该如何处理提取的数据呢?

    const fetchData = async url => {
      let results = await fetch(this.path + url)
      return await results.json()
    }
    
    function User() {
      const handleSubmit = e => {
        e.preventDefault()
        signIn({email: "Foo", password: "Bar"})
      }
      const signIn = obj => {
        if (obj.email && obj.password) {
          const [user] = createResource(() => fetchData("json/sign-in/" + obj.email + "/" + MD5(obj.password) ))
          
          console.log(user())
          /* undefined */
          console.log(user().name)
          /* Uncaught TypeError: Cannot read properties of undefined (reading 'name') */
    
        }
      }
      return (
        <>
          <button onClick={ handleSubmit }>Sign In</button>
        </>
      )
    }
    
    export default User
    

    在上面的示例中,控制台日志在尝试访问属性时返回未定义或错误。那么,一旦加载了这些数据,我该如何访问它呢?有没有比使用setTimeout更优雅的方法来处理这个问题?

    1 回复  |  直到 3 年前
        1
  •  1
  •   snnsnn    3 年前

    这个 createResource 函数接受一个tcherfunction,它应该返回一个解析为所获取数据的promise。您可以在etcher函数本身中执行任何必要的数据转换。

    此外,您可以在渲染组件之前转换从etcher函数返回的数据。