Javascript 在React上下文中,如何在状态函数中使用状态变量?
我有一个反应上下文,如下所示:Javascript 在React上下文中,如何在状态函数中使用状态变量?,javascript,reactjs,react-context,Javascript,Reactjs,React Context,我有一个反应上下文,如下所示: import React, { Component } from 'react' const AlertsContext = React.createContext({ categoryList: [], setCategoryList: () => {} }) export class AlertsProvider extends Component { state = { categoryList: [], setCat
import React, { Component } from 'react'
const AlertsContext = React.createContext({
categoryList: [],
setCategoryList: () => {}
})
export class AlertsProvider extends Component {
state = {
categoryList: [],
setCategoryList: categoryString => (
this.categoryList.includes(categoryString)
? this.setState({ categoryList: this.categoryList.filter(value => value !== categoryString) })
: this.setState({ categoryList: this.categoryList.concat([categoryString]) })
)
}
render() {
const { children } = this.props
const {categoryList, setCategoryList } = this.state
return (
<AlertsContext.Provider value={{categoryList, setCategoryList}}>
{children}
</AlertsContext.Provider>
)
}
}
export const AlertsConsumer = AlertsContext.Consumer
这是一行:
this.categoryList.includes(categoryString)
在上下文提供程序中,建议此时未定义“this.categoryList”
我试着把它改成
this.state.categoryList.includes(categoryString)
但它说我必须使用状态分解,所以我改为:
setCategoryList: (categoryString) => {
const { categoryList } = this.state
categoryList.includes(categoryString)
? this.setState({ categoryList: categoryList.filter(value => value !== categoryString) })
: this.setState({ categoryList: categoryList.concat([categoryString]) })
}
突出显示了三元运算符,并给出了以下lint错误:
Expected an assignment or function call and instead saw an expression.
我做错了什么?使用
if/else
语法更新状态
setCategoryList: categoryString => {
const { categoryList } = this.state;
if (categoryList.includes(categoryString)) {
this.setState({
categoryList: categoryList.filter(value => value !== categoryString)
});
} else {
this.setState({ categoryList: categoryList.concat([categoryString]) });
}
};
谢谢,但我仍然收到错误“预期一个赋值或函数调用,但看到了一个表达式。(eslintno未使用的表达式)”。顺便问一下,是否有理由使用if/else而不是三元运算符?有没有哪一个更好的时候?对不起,我刚刚意识到它终究还是可以工作的——它显示了一个错误,但编译时仍然可以正常运行。
Expected an assignment or function call and instead saw an expression.
setCategoryList: categoryString => {
const { categoryList } = this.state;
if (categoryList.includes(categoryString)) {
this.setState({
categoryList: categoryList.filter(value => value !== categoryString)
});
} else {
this.setState({ categoryList: categoryList.concat([categoryString]) });
}
};