javascript - this.props 没有传递函数
问题描述
在我的反应本机文件中,我试图将一个函数传递给我的子组件,static navigationOptions
但它一直说undefined is not a function(evaluating'_this.props.onUpdate(e.target.value)')
我试图将文本输入中的值传递给父组件,但它带来了上面的错误,请问是什么我做错了,
class Child extends React.Component {
constructor(props) {
super(props);
this.state = {
search: ""
}
}
handleChange = (e) => {
this.props.onUpdate(e.target.value);
this.setState({search: e.target.value});
};
render() {
return (
<TextInput placeholder="Search for your herbs by name,type..." value={this.state.search} onChange={this.handleChange}
underlineColorAndroid={'transparent'}
style={BackStyles.textBox}/>
);
}
}
父组件
export default class Parent extends React.Component {
Update = (val) => {
this.setState({
search: val
});
let db = SQLite.openDatabase({
name: 'test.db',
createFromLocation: "~Herbo.db",
location: 'Library'
}, this.openCB, this.errorCB);
db.transaction((tx) => {
tx.executeSql("SELECT * FROM data where name like '" + this.state.search + "' ", [], (tx, results) => {
console.log("Query completed");
var len = results.rows.length;
for (let i = 0; i < len; i++) {
let row = results.rows.item(i);
this.setState(prevState => ({
record: [...prevState.record, row],
pressed: [...prevState.pressed, false]
}));
console.log(`Record: ${row.name}`);
//this.sleep(2);
//this.setState({record: row});
}
this.setState({loader: false})
});
});
};
static navigationOptions = ({navigation, navigationOptions}) => {
const {params} = navigation.state;
return {
headerTitle: <Child onUpdate={this.Update}/>,
};
};
constructor(props) {
super(props);
this.state = {
record: [],
header: null,
loader: true,
pressed: {},
ar: [],
search: ''
};
let db = SQLite.openDatabase({
name: 'test.db',
createFromLocation: "~Herbo.db",
location: 'Library'
}, this.openCB, this.errorCB);
db.transaction((tx) => {
tx.executeSql('SELECT * FROM data', [], (tx, results) => {
console.log("Query completed");
var len = results.rows.length;
for (let i = 0; i < len; i++) {
let row = results.rows.item(i);
this.setState(prevState => ({
record: [...prevState.record, row],
pressed: [...prevState.pressed, false]
}));
console.log(`Record: ${row.name}`);
//this.sleep(2);
//this.setState({record: row});
}
this.setState({loader: false})
});
});
}
解决方案
方法static
无权访问实例的this
,因此当您这样做时:
static navigationOptions = ({navigation, navigationOptions}) => {
const {params} = navigation.state;
return {
headerTitle: <Child onUpdate={this.Update}/>,
};
};
this.Update
是undefined
。_ 所以当你这样做时this.props.onUpdate(e.target.value);
它正在调用undefined(e.target.value)
,而undefined
不是函数。
推荐阅读
- bash - 将 Json 文件中存在的多个卷挂载为列表
- bash - CYGWIN 中的 mkfs.vfat 和 mkfs.ext3
- homebrew-cask - 如何手动卸载 Homebrew 桶?
- python - 无法在 jupyter notebook 中导入 psycopg2,但可以在 python3 控制台中导入
- dns - 使用 BIND 配置 DNS 后无法解析
- .net - 检查字符串中的每个字符是否存在于预定义的字符集中的最有效方法是什么?
- amazon-redshift - Redshift 合并行并按时间戳解决冲突
- awk - 合并多个文件并将输出拆分为基于每列的多个文件(帖子 2)
- monit - 监控只执行一次
- python - 我可以使用 Estimator API 在没有训练步骤的情况下生成预测(例如:KNN)吗?