Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 你能使用array.push-in-useffect吗?反应钩_Javascript_Arrays_Reactjs_React Hooks - Fatal编程技术网

Javascript 你能使用array.push-in-useffect吗?反应钩

Javascript 你能使用array.push-in-useffect吗?反应钩,javascript,arrays,reactjs,react-hooks,Javascript,Arrays,Reactjs,React Hooks,我正试图找到一种将对象添加到数组中的方法。这是密码 export default function DashboardTable(props) { const { transactionData } = props; const classes = useStyles(); const [transactionDataArray, setTransactionDataArray] = useState([]) useEffect(() => { s

我正试图找到一种将对象添加到数组中的方法。这是密码

export default function DashboardTable(props) {
    const { transactionData } = props;
    const classes = useStyles();
    const [transactionDataArray, setTransactionDataArray] = useState([])

 
  useEffect(() => {
    setTransactionDataArray(transactionDataArray.push(transactionData))
  }, [transactionData])

    console.log(transactionDataArray);

transactionData返回对象(对象的数量取决于后端事务)。我想将对象添加到数组
transactionDataArray
,但我一直收到错误
transactionDataArray不是函数。哪里出错了?

要将数据添加到本地状态,您不必使用push,只需使用“setTransactionDataArray”,因为这是将数据添加到状态的函数

因此,在你的影响

  useEffect(() => {
    setTransactionDataArray(transactionData)
  }, [transactionData])

或者,如果您希望有一个包含数据的数组,则稍后将该数组添加到state,而不应声明一个数组并向其中添加数据。然后,当任务完成时,您可以将该数组添加到状态。

要将数据添加到本地状态,您不必使用push,只需使用“setTransactionDataArray”,因为该函数将向状态添加数据

因此,在你的影响

  useEffect(() => {
    setTransactionDataArray(transactionData)
  }, [transactionData])

或者,如果您希望有一个包含数据的数组,则稍后将该数组添加到state,而不应声明一个数组并向其中添加数据。然后,当作业完成时,您可以在状态中添加该数组。

是的,您可以使用push-in-useffect,但不能在状态中使用。不能直接更改反应状态。作为一个状态,您不能直接推送或编辑该状态的数据
transactionDataArray
。但是在
setTransactionDataArray
函数的帮助下,您可以更改/设置状态值。因此,要向旧状态添加新值,必须对旧状态进行分解,然后添加新值,如下所示

setTransactionDataArray([...transactionDataArray, transactionData])
或者,您可以像下面这样创建一个新变量,为状态赋值,然后将新值推送到该变量,最后设置状态

const data = transactionDataArray;
data.push(transactionData);
setTransactionDataArray(data);

有关react state的更多信息

是,您可以使用push-in-use-effect,但不能在状态上使用。不能直接更改反应状态。作为一个状态,您不能直接推送或编辑该状态的数据
transactionDataArray
。但是在
setTransactionDataArray
函数的帮助下,您可以更改/设置状态值。因此,要向旧状态添加新值,必须对旧状态进行分解,然后添加新值,如下所示

setTransactionDataArray([...transactionDataArray, transactionData])
或者,您可以像下面这样创建一个新变量,为状态赋值,然后将新值推送到该变量,最后设置状态

const data = transactionDataArray;
data.push(transactionData);
setTransactionDataArray(data);

有关react state的更多信息

请尝试使用此setTransactionDataArray([…transactionDataArray,transactionData]),请阅读
Array.prototype.push的实际功能。它不返回更新后的数组,而是返回新数组的长度。此外,
push
会对原始数组进行变异,这违反了反应状态的规则。这是否回答了您的问题@拉贾贾纳森。从技术上讲,它有效吗?但它将数组嵌套得更深@brianthonpson hmmmm。我懂了。将像下面的setTransactionDataArray([…transactionDataArray,transactionData])一样进行研究。请阅读
Array.prototype.push的实际功能。它不返回更新后的数组,而是返回新数组的长度。此外,
push
会对原始数组进行变异,这违反了反应状态的规则。这是否回答了您的问题@拉贾贾纳森。从技术上讲,它有效吗?但它将数组嵌套得更深@brianthonpson hmmmm。我懂了。我会调查的是的,这只会得到最新的东西。因此,您只能从
transactionData
获取最新的事务。我正在尝试获取所有数据并将其添加到arrayYeah中,这只获取最新的对象。因此,您只能从
transactionData
获取最新的事务。我正在尝试获取所有数据并将其添加到阵列中。你已经解决了它。谢谢第二个解决方案仍然会改变状态,它只是避免了长度问题的返回值。你永远不应该改变状态。您需要创建一个新的数组,但要遵循第一个示例,或者扩展以前的值
[…transactionDataArray]
。啊,是的,我尝试了本文的第二个解决方案,但总是延迟1。我尝试使用spread运算符
[…transactionDataArray,transactionData]
,它工作得非常好。我想让拉贾发布他的答案,所以我把它作为官方答案。你已经解决了。谢谢第二个解决方案仍然会改变状态,它只是避免了长度问题的返回值。你永远不应该改变状态。您需要创建一个新的数组,但要遵循第一个示例,或者扩展以前的值
[…transactionDataArray]
。啊,是的,我尝试了本文的第二个解决方案,但总是延迟1。我尝试使用spread运算符
[…transactionDataArray,transactionData]
,它工作得非常好。我希望Raja能发布他的答案,所以我把它作为官方答案。