React Native:不变冲突:作为回调传递的参数无效.期望一个函数.而是收到:[对象对象]



我正在尝试使用 setState onPress 更新布尔值。根据按下的按钮,其他布尔值将分别设置为 false 或 true。

法典:

export default class SettingsScreen extends React.Component {
constructor(){
super();
this.state = {
isMeat: true,
isVegan: false,
isVegetarian: false,
}
}  
render() {
return (
<View style={styles.container}>
<View style={styles.menuTop}>
<MenuButton navigation = {this.props.navigation} />
<Text style={styles.menuText}>Settings</Text>
</View>
<View style = {styles.body}>
<Button title="make it vegan!"
style = {styles.vegan}
onPress = {()=> {
this.setState({isMeat : false}, {isVegan: true}, {isVegetarian: false})
}}
>
make it vegan!
</Button>
<Button title="vegetarian please"
style = {styles.vegetarian}
onPress = {()=> {
this.setState({isMeat : false}, {isVegan: false}, {isVegetarian: true})
}}
>
vegetarian please
</Button>
<Button title="meat me up, Scotty!"
style = {styles.meat}
onPress = {()=> {
this.setState({isMeat : true}, {isVegan: false}, {isVegetarian: false})
}}
>
meat me up, Scotty!
</Button>
</View>
</View>
);
}
}

当我按下其中一个按钮时,我收到错误消息:Invariant Violation: Invalid argument passed as callback. Expected a function. Instead received: [object Object]但我不明白为什么。

好的,让我们深入研究一下。其他答案在显示如何修复代码方面是正确的,但没有解释为什么它们是正确的。你说当你按下按钮时就会发生这种情况,所以它与onPress有关。

onPress = {()=> {
this.setState({isMeat : false}, {isVegan: true}, {isVegetarian: false})
}}

这就是你在按钮中拥有的内容,特别是 setState(...) 在 thunk/箭头函数内部传递。thunk/arrow函数很好 - 它与onPress所需的类型相匹配,这是一个函数,并在您按下按钮时setState运行。目前为止,一切都好。

现在,让我们来看看 React 中setState的文档,特别是它需要哪些参数。如果你看下面,它需要两个参数——一个更新程序(经典的setState对象)和一个回调。

setState(updater[, callback])

好的,让我们再看看你有什么,更仔细:

this.setState({isMeat : false}, {isVegan: true}, {isVegetarian: false})

因此,如果我们将您编写的内容与文档中的内容进行比较,您将{isMeat: false}作为更新程序传递,{isVegan: true}作为可选回调传递,{isVegetarian: false}作为第三个完全未使用的参数传递。

{isMeat: false}不是一个函数,因此您会收到看到的消息。这就是您看到不变违规的原因。

您可以使用setState一次分配多个属性,并避免像前面的答案建议的那样进行多次调用,如下所示:

this.setState({
isMeat: false,
isVegan: true,
isVegetarian: false
})

也许是因为您将多个对象传递到 setState() 函数中?

尝试将它们切换为单个对象,仅更新要更改的属性。例如:

<Button title="make it vegan!"
style = {styles.vegan}
onPress = {()=> {
this.setState({isVegan: true})
}}
>

像这样它的工作原理:

<Button title="make it vegan!"
style = {styles.vegan}
onPress = {()=> {
this.setState({isMeat : false})
this.setState({isVegetarian : false})
this.setState({isVegan : true})
}}
>
make it vegan!
</Button>

我有错误,因为我没有向OneSignal.promptForPushNotificationsWithUserResponse传递回调

在读取堆栈跟踪时找到它

相关内容

  • 没有找到相关文章

最新更新