#javascript #reactjs
#javascript #reactjs
Вопрос:
Я только что реорганизовал устаревшее приложение 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
Комментарии:
1. Также, пожалуйста, добавьте, как вы отображаете компонент панели поиска внутри компонента приложения. Только что видел вашу версию React, уверен, что хуков не было в React версии 16.6.3. Думаю, они были добавлены в версии 16.7 или, может быть, версии 16.8. Исправляет ли обновление вашей версии React ошибку?
2. @Jayce444, продолжай и опубликуй свое предложение в качестве ответа. Я обновил
react
иreact-dom
до16.11.0
, и ошибка исчезла.
Ответ №1:
Согласно комментарию @Daniels, это было связано с тем, что React был версии 16.6.3, которая была до того, как были поддержаны перехваты. Обновление react
и react-dom
до версии 16.11.0 устранило проблему