reactjs - 从父 React Native 调用子函数 - TypeError 无法读取 null 的属性
问题描述
我有一个父组件,它有一个过滤器组件,过滤器组件有一个过滤器框组件,上面有一个按钮。Parent > Filter > FilterBox FilterBox 有一个按钮,点击时会调用 onButtonPress 函数。我想从过滤器组件中调用这个 onButtonPress 函数。尝试使用 refs 也尝试在构造函数中绑定函数。仍然出现错误。
class Filter extends Component {
constructor() {
super();
this.child = React.createRef();
}
render() {
return (
<View>
<FilterBox
//props
ref = {this.child}
/>
<TouchableOpacity
onPress={()=>this.child.current.onButtonPress()}/>
</View>
)
}
class FilterBox extends Component {
constructor() {
super();
this.onButtonPress = this.onButtonPress.bind(this);
}
onButtonPress = () =>{
console.log("Hi")
}
}
我得到一个无法读取 null 的属性“onButtonPress”
解决方案
您可以执行以下操作。我在反应中重现它,因此将按钮转换为 TouchableOpacity,将 onPress 转换为 onClick。
它所做的是将一个函数作为道具从过滤器传递到过滤器盒,当您从过滤器盒的 componentDidMount 调用该函数时,它会设置过滤器组件的状态并将 onButtonPress 函数提供给 this.state.propFunc。
class Filter extends Component {
constructor() {
super();
this.child = React.createRef();
this.state = {
propFunc: null
}
this.funcToPass = this.funcToPass.bind(this)
}
funcToPass(fn) {
this.setState({ propFunc: fn })
}
render() {
return (
<div>
<FilterBox
funcToPass={this.funcToPass}
/>
{this.state.propFunc != null && <button onClick={this.state.propFunc} />}
</div>
)
}
}
class FilterBox extends Component {
constructor() {
super();
}
onButtonPress = () => {
console.log("Hi")
}
componentDidMount() {
this.props.funcToPass(this.onButtonPress)
}
render() {
return (
<div>
</div>
)
}
}
推荐阅读
- nativescript - 在 Android Studio 中打开 NativeScript 项目
- windows - 通过 Windows 10 文件资源管理器中的上下文菜单水平翻转
- javascript - 为什么搜索栏会改变标题的位置?
- maven - Gradle init 抛出 NPE
- c# - 如何找到与 Windows 登录相关联的 Microsoft 帐户?
- leaflet - 彩色相交传单圈
- ios - UITableView在插入时重复行
- django - EOF 发生在 python:3.8-slim-buster 上违反协议 (_ssl.c:1125)
- javascript - 使用geojson地图仅在一个轴上调整d3JS中的投影大小
- data-extraction - 如何使用 Visual Basic 从在线网站提取数据并将数据放入文本框或通过附加到 MSSQL 数据库的网格视图?