我正在使用react-native
构建应用。我有3个组件,分别是Ind.js
,Buttons.js
,Rain.js
。我需要在Rain
中选择一个选项,并将其保存为Ind
的状态,以便进行进一步处理。由于Rain
组件与Ind
没有直接关系,而是通过navigation route
中的Buttons
连接的。
我正在使用react-navigation
。
为此,我在onSelect()
中创建了一个函数Ind
,该函数执行setState
并通过props传递给Buttons
,然后再次传递给Rain
,然后我执行了该函数,问题是该函数被调用但没有传递任何参数,即先console.logs
null
然后undefined
。
我尝试console.log
传递给Ind
的参数。
Ind.js
export default class Ind extends Component {
constructor(){
super();
this.state = { report: null}
}
onSelect = (newreport) => {
this.setState({
report: newreport
})
console.log("Parameter: ", newreport)
console.log("State: ", this.state.report)
}
render(){
return(
<Buttons selectReport={() => this.onSelect()}
)
}
}
Buttons.js
export default class Buttons extends Component{
constructor(props){
super(props);
}
render(){
return(
<TouchableOpacity
onPress={() => {this.props.navigation.navigate('Rain',{
selectReport: this.props.selectReport });
}}>
<Text style={styles.text}>Rain</Text>
</TouchableOpacity>
)
}
}
Rain.js
export default class Rain extends Component{
constructor(props){
super(props);
this.state = {
selection: "Test"
}
this.selectOption = this.selectOption.bind(this);
}
selectOption = () => {
this.props.navigation.state.params.selectReport(this.state.selection)
}
}
console log
首先返回Parameter: undefined State: null
,这是可以理解的,因为没有单击任何内容,但是单击后显示
Parameter: undefined State: undefined
。
怎么了?我是一个初学者,绑定或发送道具时出了什么问题?
请解释。
答案 0 :(得分:0)
setState是一个异步函数,所以这就是为什么在第一次单击后您会得到null(因为它尚未更改)但在代码中某个地方传递newreport值是错误的原因。
答案 1 :(得分:0)
您没有在点击按钮中放置任何 imgEl.src = e.target.result;
imgEl.setAttribute("width", 160);
imgEl.setAttribute("height", 160);
document.body.append(imgEl);
im.onload = () => {
// create the tensor after the image has loaded
const fromPixels = tf.browser.fromPixels(imgEl);
resolve(fromPixels);
}
。但是,该函数正在接收parameters
作为值。当然,它指向parameters
。
undefind
答案 2 :(得分:0)
使用箭头功能时,您需要像这样调用
<Buttons selectReport={() => this.onSelect} > //without parenthesis
setState
也是async
,因此您需要在callback
中使用setState
来打印值。
您需要执行此操作
export default class Ind extends Component {
constructor(){
super();
this.state = { report: null}
}
onSelect = (newreport) => {
console.log("Parameter: ", newreport)
this.setState({
report: newreport
},()=> console.log("State: ", this.state.report)) //prints in callback
}
render(){
return(
<Buttons selectReport={() => this.onSelect}>
)
}
}