代码之家  ›  专栏  ›  技术社区  ›  Yangshun Tay

未捕获的类型错误:create不是使用useffect React Hook和AJAX请求的函数

  •  2
  • Yangshun Tay  · 技术社区  · 7 年前

    function App() {
      const [user, setUser] = React.useState(null);
      React.useEffect(fetch('https://randomuser.me/api/')
        .then(results => results.json())
        .then(data => {
          setUser(data.results[0]);
        }), []);
      
      return <div>
        {user ? user.name.first : 'Loading...'}
      </div>;
    }
    
    ReactDOM.render(<App/>, document.getElementById('app'));
    <script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>
    
    <div id="app"></div>
    Uncaught TypeError: create is not a function
        at commitHookEffectList (react-dom.development.js:15901)
        at commitPassiveHookEffects (react-dom.development.js:15911)
        at HTMLUnknownElement.callCallback (react-dom.development.js:149)
        at Object.invokeGuardedCallbackDev (react-dom.development.js:199)
        at invokeGuardedCallback (react-dom.development.js:256)
        at commitPassiveEffects (react-dom.development.js:17299)
        at wrapped (scheduler-tracing.development.js:204)
        at flushPassiveEffects (react-dom.development.js:17338)
        at dispatchAction (react-dom.development.js:12035)
        at eval (index.jsx? [sm]:9)
    
    1 回复  |  直到 7 年前
        1
  •  28
  •   Yangshun Tay    7 年前

    这是因为没有回调函数被传递到 useEffect . 在上面的例子中,它实际上是在执行 fetch 不返回任何内容的请求。包装 取来 调用一个arrow/匿名函数,它就可以工作了。

    function App() {
      const [user, setUser] = React.useState(null);
      React.useEffect(() => { // Pass in a callback function!
        fetch('https://randomuser.me/api/')
          .then(results => results.json())
          .then(data => {
            setUser(data.results[0]);
        });
      }, []);
      
      return <div>
        {user ? user.name.first : 'Loading...'}
      </div>;
    }
    
    ReactDOM.render(<App/>, document.getElementById('app'));
    <script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>
    
    <div id="app"></div>