【问题标题】:TypeError: Object(...) is not a function ReactTypeError: Object(...) is not a function React
【发布时间】:2019-04-05 17:42:13
【问题描述】:

我正在通过 channel 学习 React。最近,我偶然发现了来自 here 的 React Hooks。因此,我尝试将基于类的组件转换为基于钩子的组件。这是我的基于类的组件:

import React, { Component } from 'react';

class AddNinja extends Component {
    state = {
        name: null,
        age: null,
        skill: null,
    }
    handleChange = e => {
        this.setState({
            [e.target.id]: e.target.value,
        })
    }
    handleSubmit = e => {
        e.preventDefault();
        this.props.addNinja(this.state);
    }
    render() {
        return (
            <div>
                <form onSubmit={ this.handleSubmit }>
                    <label htmlFor="name">Name: </label>
                    <input type="text" id="name" onChange={ this.handleChange } />

                    <label htmlFor="age">Age: </label>
                    <input type="number" id="age" onChange={ this.handleChange } />

                    <label htmlFor="skill">Skill: </label>
                    <input type="text" id="skill" onChange={ this.handleChange } />

                    <button>Submit</button>
                </form>
            </div>
        )
    }
}

这是我转换后的组件: https://codesandbox.io/s/n0lw4wo550?module=%2Fsrc%2FAddNinja.js

但我收到以下错误:

【问题讨论】:

  • 我认为这是版本问题。因为 Hooks 目前在 React v16.7.0-alpha 中,并且正在开放的 RFC reactjs.org/docs/hooks-intro.html 中进行讨论,并且您在沙箱中使用 React 16.6.0。

标签: reactjs react-component react-hooks


【解决方案1】:

React 钩子在 React v16.8.0 中可用。将您的 react 和 react dom 版本更新为16.8.0

"react": "16.8.0",
"react-dom": "16.8.0",  

这是更新版本的代码:https://codesandbox.io/s/qq90900xr4

【讨论】: