javascript - TypeError:从类重构为函数组件后,Object(...) 不是函数
问题描述
我刚刚将一个遗留的 React 16.6.3 应用程序从一个基于类的SearchBar
组件重构为一个函数组件,如下所示:
import React, { useState } from 'react';
const SearchBar = ({ onFormSubmit }) => {
const [term, setTerm] = useState('');
const onSubmit = (event) => {
event.preventDefault();
onFormSubmit(term);
};
return (
<div className="search-bar ui segment">
<form onSubmit={onSubmit} className="ui form">
<div className="field">
<label>Video Search</label>
<input
type="text"
value={term}
onChange={(event) => setTerm(event.target.value)}
/>
</div>
</form>
</div>
);
};
export default SearchBar;
我没有看到我的代码有任何问题,即使我尚未将App
组件从类重构为函数组件,它也应该按预期工作。我正在导入SearchBar
类似的东西:
import React from "react";
import SearchBar from "./SearchBar";
import youtube from "../apis/youtube";
import VideoList from "./VideoList";
import VideoDetail from "./VideoDetail";
class App extends React.Component {
state = { videos: [], selectedVideo: null };
componentDidMount() {
this.onTermSubmit("JavaScript");
}
这里给出了什么,我无法检测到我在哪里犯了错误。这是确切的错误:
TypeError: Object(...) is not a function
SearchBar
src/components/SearchBar.js:3
1 | import React, { useState } from 'react';
2 |
> 3 | const SearchBar = ({ onFormSubmit }) => {
4 | const [term, setTerm] = useState('');
5 |
6 | const onSubmit = (event) => {
View compiled
▶ 22 stack frames were collapsed.
Module../src/index.js
src/index.js:5
2 | import ReactDOM from 'react-dom';
3 | import App from './components/App';
4 |
> 5 | ReactDOM.render(<App />, document.querySelector('#root'));
6 |
View compiled
解决方案
根据@Daniels 的评论,这是因为 React 是 16.6.3 版本,这是在支持钩子之前。升级react
到react-dom
v16.11.0 解决了这个问题
推荐阅读
- python-3.x - 如何在 pyinstaller 中减小 exe 文件的大小
- optimization - 路由求解器:未知舰队规模/舰队规模优化/无限舰队规模
- git - Git日志,我如何列出不包括后来与另一个合并的提交?
- python - 将嵌套的 JSON 展平为 pandas 数据框列
- math - 正确报告搜索值样本的误差范围
- c# - 通过 TFS REST API 将工作项添加到板列
- matlab - 转置 double 和 int64 值的表,无需 int64 转换
- json - 将特定实体发送到 FIWARE QuantumLeap
- javascript - discord.js v12 向第一个频道发送消息
- mysql - 当列和表被定义时,列是未知的?