reactjs - 反应js中未定义handleChange
问题描述
每当我使用箭头函数并且没有将方法绑定到类构造函数中的“this”时,我都会收到一个错误消息,说handleChange 是未定义的。我正在看一个教程,讲师说我们可以使用箭头函数定义自己的方法来克服将方法绑定到“this”的问题。这是我的代码:
import React, { Component } from 'react';
//import logo from './logo.svg';
import './App.css';
import CardList from "./cardlist_component";
import SearchBox from "./search-box";
class App extends Component {
constructor(){
super();
this.state = {
monsters: [],
searchField: ""
}
// this.handleChange = this.handleChange.bind(this)
}
componentDidMount(){
fetch('https://jsonplaceholder.typicode.com/users')
.then(response => response.json())
.then(user => this.setState({monsters:user}));
}
handleChange = (e) => {
this.setState({searchField:e.target.value});
};
render(){
const { monsters,searchField } = this.state;
const filteredMonsters = monsters.filter(whatever =>
whatever.name.toLowerCase().includes(searchField.toLowerCase())
)
return(
<div className="App">
<SearchBox handleChange={this.handleChange} />
<CardList monsters={filteredMonsters}/>
</div>
);
}
}
export default App;
为了将我的代码与教程同步,我不得不稍微降级我的 React 和 create-react-script。这是 package.json 文件:
{
"name": "monsters-rolodex",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-scripts": "3.0.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
这是我的搜索框代码:
import React from 'react';
import "./search-box-styles.css";
const SearchBox = (props) => {
return(
<div className="search">
<input type="search"
placeholder="search monsters"
onChange={props.handleChange}
/>
</div>
);
}
export default SearchBox;
我的索引代码:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(<App />, document.getElementById('root'));
serviceWorker.unregister();
请查看我的 index.js 和 package.json 文件
解决方案
发现问题了!!!!
我将 react 和 react-dom 升级到 16.13.1,将 react-scripts 升级到 3.4.3。然后改变了我的 index.js。新的 index.js 代码:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
// import * as serviceWorker from './serviceWorker';
// ReactDOM.render(<App />, document.getElementById('root'));
const rootElement = document.getElementById("root");
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
rootElement
);
我觉得跟新的有关系
<React.StrictMode>
<App />
</React.StrictMode>,
代码,因为我降级了我的反应脚本,所以之前没有。 不过感谢您的回复:)
推荐阅读
- python - 根据条件python检查行中的下一个值是否相同?
- c++ - 当我声明它时,Class' 没有被声明为错误
- javascript - 如何从紫色更改 React Appbar 链接
- css-transitions - Android Google Chrome menu-burger 转换问题(translateY 无法正常工作)
- tfs - Ready API (v2.4) 与 TFS 集成,用于代码仓库
- java - 计算线段和点之间的距离
- react-native - 尝试在反应本机 pjsip 模块中创建帐户时出错
- jestjs - 使用排毒环境设置 Jest 后发出 Hang Detox Test
- javascript - 为什么抛出此错误会导致空白响应,而其他人则有效?
- ios - Gem::Ext::BuildError: 错误: 无法在 mac 上构建 gem 原生扩展。无法安装racc