Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在React上下文中,如何在状态函数中使用状态变量?_Javascript_Reactjs_React Context - Fatal编程技术网

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]) });
  }
};