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能发布他的答案,所以我把它作为官方答案。