如何将状态附加到另一状态做出反应

时间:2020-10-07 00:56:42

标签: reactjs

我有一个称为数据库的状态变量,该变量返回一个对象和一个保存数据库名称的数组,如下所示,这是一个下拉菜单。我希望能够从数据库状态数组中获取值(object_name)并将它们从addToProduction函数附加到数据库数组的末尾。数据库状态变量也位于另一个组件中。

这是从数据库状态变量返回的数据:

enter image description here

这是addToProduction函数中的数据:

enter image description here

这是函数addToProduction ....选中此复选框时,它会将值添加或删除到productionDatabaseState:

  const [productionDatabaseData, setProductionDatabaseData] = useState([])

const addToProduction = ({ target }, { id, databases }) => {

    setProductionDatabaseData((previousState) => {

      let newState = [...previousState]
      if (target.checked) {
        newState = [
          ...newState,
         {  unit_test_id: id, databases }
        ]
      } else {
        const i = newState.findIndex(({ unit_test_id }) => unit_test_id === id)
        if (i !== -1) newState.splice(i, 1)
      }
      return newState
    })
  }

  useEffect(() => {
    console.log("databaseArr", productionDatabaseData);
  }, [productionDatabaseData]);

我的预期输出应为:

databaseArr:

enter image description here

基本上,数据库状态数组会附加到databaseArr的末尾。

更新的代码:

  const addToProduction = ({ target }, { id, databases }) => {
  
      setProductionDatabaseData((previousState) => {
  
        let newState = [...previousState]
        if (target.checked) {
          newState = [
            ...newState,
           {  unit_test_id: id, databases }
          ]
        } else {
          const i = newState.findIndex(({ unit_test_id }) => unit_test_id === id)
          if (i !== -1) newState.splice(i, 1)
        }
        return newState
      })
      const appendedArrays = [productionDatabaseData, ...props.database.recent_objects_modified_by_user.map(({object_name}) => object_name)]

      useEffect(() => {
        console.log("databaseArr", appendedArrays);
      }, [productionDatabaseData, appendedArrays]);
  
    }

更新v2:

  const [addRemoveDatabase, setAddRemoveDatabase] = useState('prod.auiag.corp/iadpprod')

1 个答案:

答案 0 :(得分:0)

我不知道recent_objects_modified_by_user数据的存储位置,但是您可以执行以下操作,假设它是database状态var:

const appendedArrays = [productionDatabaseData, ...database.recent_objects_modified_by_user.map(({object_name}) => object_name)]

这是通过使用传播运算符(ref here

实现的