javascript - 无法将道具中的功能传递给组件 | 反应
问题描述
我正在尝试将函数 onSearchChangeEvent() 从我的 App.js 作为函数传递给 Searchbox 组件,但我收到错误消息
预期
onChange
的侦听器是一个函数,而不是一个object
类型的值。
我在 Stackoverflow 上查找了相同错误的不同答案,但我无法解决此问题。
App.js :包含我试图传递给< Searchbox />组件的onSearchChangeEvent()函数。
import React, {Component} from 'react';
import Cardlist from './Cardlist';
import Searchbox from './Searchbox';
import {robots} from './robots';
class App extends Component {
constructor () {
super()
this.state = {
robots : robots,
searchfield : ''
}
}
onSearchChangeEvent = () => {
console.log("Something Happened");
}
render () {
return (
<div className='tc'>
<h1>Robo Friends</h1>
<Searchbox searchChange={() => this.onSearchChangeEvent}/>
<Cardlist robots={this.state.robots} />
</div>
);
}
}
export default App;
搜索框.js
import React from 'react';
const Searchbox = (searchField, searchChange) => {
return (
<div className='pa2'>
<input
className='pa3 ba b--green bg-lightest-blue'
type='search'
placeholder='Search Robots'
onChange={searchChange}
/>
</div>
);
}
export default Searchbox;
错误:首先我收到警告,当触发事件时我收到错误
解决方案
您没有在SearchBox
组件中正确访问道具。您需要解构它们而不是将它们定义为参数
const Searchbox = ({ searchField, searchChange }) => {
return (
<div className='pa2'>
<input
className='pa3 ba b--green bg-lightest-blue'
type='search'
placeholder='Search Robots'
onChange={searchChange}
/>
</div>
);
}
像这样传下去
<Searchbox searchChange={this.onSearchChangeEvent}/>
或者
<Searchbox searchChange={() => this.onSearchChangeEvent()}/>
尽管您必须更喜欢<Searchbox searchChange={this.onSearchChangeEvent}/>
,因为您在定义函数时已经在使用箭头onSearchChangeEvent
函数
推荐阅读
- mongodb - 有没有办法使用 MongoDB 驱动程序填充用于批量插入的向量,然后再次使用它而不进行克隆?
- c++ - 如何修复错误“响应代码 0”以获取“响应代码 202”以批量更新 ThingSpeak 频道?
- java - Java Collator 对法语字符串的排序不正确
- rest - API - 连续调用
- ios - 将 rx.value 添加到我的 CustomView
- javascript - 加载外部资源/API
- triggers - G 应用程序脚本表反复询问授权,尽管已多次授予(时间驱动触发器)
- cookies - 从 vuex 商店中删除项目
- ubuntu - 在 Ubuntu 上安装了 Kubernetes,我看到在 MAAS 中创建了很多节点
- node.js - https如何与http通信