[英]Is there any function to use to see the new updated array state using React Js Hook?
我有關於使用 Effect Hook 的問題,現在我有模塊,當我點擊按鈕時,它會自動添加 5 個新數組,所以每一行都有 onChange 這可能正在工作。 然而,當我控制台記錄 state 仍然沒有效果,但在我看來已經生效。
問題:為什么我的 state 仍然是 5 但我桌子上的行已經 10..
這是示例 output:
如您所見,我已經有 10 行,因為我已經添加了新行,但默認情況下只有 5 行。 但是當我控制台它登錄到我的 onchange 處理程序內部時,state 只有 5 個,當我控制台日志 state 時沒有反射發生。
根據我的研究,我需要使用 React Hook Effects,但是如何在 Hooks Effect 中使用呢? 我將向你們展示我創建的示例代碼。
這里默認5默認state:
const [data, setData] = useState([{
key: "1",
customer: <select className="form-control" name="customer" onChange={(e,i) => handleInputChange(e,0)} >
<option key="0" disabled selected>Select Customer</option>
<option key="1">LEXI INC / joseph</option>
<option key="1">LEXI INC / james</option>
<option key="1">LEXI INC / charlie</option>
<option key="1">LEXI INC / pam</option>
<option key="1">LEXI INC / regorio</option>
</select>,
bank: <select className="form-control" name="bank" onChange={(e,i) => handleInputChange(e,0)}>
<option key="0" disabled selected>Select Bank</option>
<option key="1">BDO</option>
<option key="1">MAY BANK</option>
<option key="1">EAST WEST BANK</option>
<option key="1">UNION BANK</option>
<option key="1">BPI</option>
</select>,
branch: <input className="form-control" placeholder="Branch" name="branch" onChange={(e,i) => handleInputChange(e,0)}/>,
checkNo: <input type="number" className="form-control" name="checkNo" placeholder="Check No." onChange={(e,i) => handleInputChange(e,0)}/>,
checkDate: <input type="date" name="checkDate" className="form-control" onChange={(e,i) => handleInputChange(e,0)}/>,
amount: <input
name="amount"
className="form-control"
placeholder="Amount"
onChange={(e,i) => handleInputChange(e,0)}
/>,
remarks: <select className="form-control" name="remarks" onChange={(e,i) => handleInputChange(e,0)}>
<option key="0" disabled selected>Select Remarks</option>
<option key="1">Test</option>
</select>,
},
{
key: "2",
customer: <select className="form-control" name="customer" onChange={(e,i) => handleInputChange(e,1)}>
<option key="0" disabled selected>Select Customer</option>
<option key="1">LEXI INC / james</option>
<option key="1">LEXI INC / charlie</option>
<option key="1">LEXI INC / pam</option>
<option key="1">LEXI INC / regorio</option>
</select>,
bank: <select className="form-control" name="bank" onChange={(e,i) => handleInputChange(e,1)}>
<option key="0" disabled selected>Select Bank</option>
<option key="1">BDO</option>
<option key="1">MAY BANK</option>
<option key="1">EAST WEST BANK</option>
<option key="1">UNION BANK</option>
<option key="1">BPI</option>
</select>,
branch: <input className="form-control" placeholder="Branch" name="branch" onChange={(e,i) => handleInputChange(e,1)}/>,
checkNo: <input type="number" className="form-control" name="checkNo" placeholder="Check No." onChange={(e,i) => handleInputChange(e,1)}/>,
checkDate: <input type="date" name="checkDate" className="form-control" onChange={(e,i) => handleInputChange(e,1)}/>,
amount: <input
name="amount"
className="form-control"
placeholder="Amount"
onChange={(e,i) => handleInputChange(e,1)}
/>,
remarks: <select className="form-control" name="remarks" onChange={(e,i) => handleInputChange(e,1)}>
<option key="0" disabled selected>Select Remarks</option>
<option key="1">Test</option>
</select>,
},
{
key: "3",
customer: <select className="form-control" name="customer" onChange={(e,i) => handleInputChange(e,2)}>
<option key="0" disabled selected>Select Customer</option>
<option key="1">LEXI INC / james</option>
<option key="1">LEXI INC / charlie</option>
<option key="1">LEXI INC / pam</option>
<option key="1">LEXI INC / regorio</option>
</select>,
bank: <select className="form-control" name="bank" onChange={(e,i) => handleInputChange(e,2)}>
<option key="0" disabled selected>Select Bank</option>
<option key="1">BDO</option>
<option key="1">MAY BANK</option>
<option key="1">EAST WEST BANK</option>
<option key="1">UNION BANK</option>
<option key="1">BPI</option>
</select>,
branch: <input className="form-control" placeholder="Branch" name="branch" onChange={(e,i) => handleInputChange(e,2)}/>,
checkNo: <input type="number" className="form-control" name="checkNo" placeholder="Check No." onChange={(e,i) => handleInputChange(e,2)}/>,
checkDate: <input type="date" name="checkDate" className="form-control" onChange={(e,i) => handleInputChange(e,2)}/>,
amount: <input
name="amount"
className="form-control"
placeholder="Amount"
onChange={(e,i) => handleInputChange(e,2)}
/>,
remarks: <select className="form-control" name="remarks" onChange={(e,i) => handleInputChange(e,2)}>
<option key="0" disabled selected>Select Remarks</option>
<option key="1">Test</option>
</select>,
},
{
key: "4",
customer: <select className="form-control" name="customer" onChange={(e,i) => handleInputChange(e,3)}>
<option key="0" disabled selected>Select Customer</option>
<option key="1">LEXI INC / james</option>
<option key="1">LEXI INC / charlie</option>
<option key="1">LEXI INC / pam</option>
<option key="1">LEXI INC / regorio</option>
</select>,
bank: <select className="form-control" name="bank" onChange={(e,i) => handleInputChange(e,3)}>
<option key="0" disabled selected>Select Bank</option>
<option key="1">BDO</option>
<option key="1">MAY BANK</option>
<option key="1">EAST WEST BANK</option>
<option key="1">UNION BANK</option>
<option key="1">BPI</option>
</select>,
branch: <input className="form-control" placeholder="Branch" name="branch" onChange={(e,i) => handleInputChange(e,3)}/>,
checkNo: <input type="number" className="form-control" name="checkNo" placeholder="Check No." onChange={(e,i) => handleInputChange(e,3)}/>,
checkDate: <input type="date" name="checkDate" className="form-control" onChange={(e,i) => handleInputChange(e,3)}/>,
amount: <input
name="amount"
className="form-control"
placeholder="Amount"
onChange={(e,i) => handleInputChange(e,3)}
/>,
remarks: <select className="form-control" name="remarks" onChange={(e,i) => handleInputChange(e,3)}>
<option key="0" disabled selected>Select Remarks</option>
<option key="1">Test</option>
</select>,
},
{
key: "5",
customer: <select className="form-control" name="customer" onChange={(e,i) => handleInputChange(e,4)}>
<option key="0" disabled selected>Select Customer</option>
<option key="1">LEXI INC / james</option>
<option key="1">LEXI INC / charlie</option>
<option key="1">LEXI INC / pam</option>
<option key="1">LEXI INC / regorio</option>
</select>,
bank: <select className="form-control" name="bank" onChange={(e,i) => handleInputChange(e,4)}>
<option key="0" disabled selected>Select Bank</option>
<option key="1">BDO</option>
<option key="1">MAY BANK</option>
<option key="1">EAST WEST BANK</option>
<option key="1">UNION BANK</option>
<option key="1">BPI</option>
</select>,
branch: <input className="form-control" placeholder="Branch" name="branch" onChange={(e,i) => handleInputChange(e,4)}/>,
checkNo: <input type="number" className="form-control" name="checkNo" placeholder="Check No." onChange={(e,i) => handleInputChange(e,4)}/>,
checkDate: <input type="date" name="checkDate" className="form-control" onChange={(e,i) => handleInputChange(e,4)}/>,
amount: <input
name="amount"
className="form-control"
placeholder="Amount"
onChange={(e,i) => handleInputChange(e,4)}
/>,
remarks: <select className="form-control" name="remarks" onChange={(e,i) => handleInputChange(e,4)}>
<option key="0" disabled selected>Select Remarks</option>
<option key="1">Test</option>
</select>,
}])
const [list, setList] = useState(data);
按鈕 當我點擊它時它會添加新的 5 行:
<button type="submit" class="btn btn-danger" onClick={() => addRows()}>Add Row</button>
添加行 Function:
const addRows = () => {
//loop here the keys listed
let initialKey = 0;
const x = data.slice(-1);
initialKey = parseInt(x[0]['key']);
let newArr=[...Array(5)].map((_,i)=>{
let val=i + 1 +initialKey;
return {
key: ""+val+"",
customer: <select className="form-control" name="customer" onChange={(e,i) => handleInputChange(e,val)}>
<option key="0" disabled selected>Select Customer</option>
<option key="6">LEXI INC / joseph</option>
<option key="6">LEXI INC / james</option>
<option key="6">LEXI INC / charlie</option>
<option key="6">LEXI INC / pam</option>
<option key="6">LEXI INC / regorio</option>
</select>,
bank: <select className="form-control" name="bank" onChange={(e,i) => handleInputChange(e,val)}>
<option key="0" disabled selected>Select Bank</option>
<option key="6">BDO</option>
<option key="6">MAY BANK</option>
<option key="6">EAST WEST BANK</option>
<option key="6">UNION BANK</option>
<option key="6">BPI</option>
</select>,
branch: <input className="form-control" placeholder="Branch" name="branch" onChange={(e,i) => handleInputChange(e,val)}/>,
checkNo: <input type="number" className="form-control" name="checkNo" placeholder="Check No." onChange={(e,i) => handleInputChange(e,val)}/>,
checkDate: <input type="date" name="checkDate" className="form-control" onChange={(e,i) => handleInputChange(e,val)}/>,
amount: <input
name="amount"
className="form-control"
placeholder="Amount"
onChange={(e,i) => handleInputChange(e,val)}
/>,
remarks: <select className="form-control" name="remarks" onChange={(e,i) => handleInputChange(e,val)}>
<option key="0" disabled selected>Select Remarks</option>
<option key="6">Test</option>
</select>
}
});
setData([...data,...newArr])
}
這是OnChange的function
const handleInputChange = (e, i) => {
console.log(i);
const { name, value } = e.target;
const list = [...data];
console.log(list);
const x = list[i];
// const x = list[i][name] = value;
console.log(x)
}
Output Onchange:根據日志,state 僅為 5。
你可以試試這個:
useEffect(() => {
setTimeout(()=>{
setData(yourDataArray)
}, 1000)
}, [])
useEffect(() => {
// this will get run whenever `data` changes
console.log("data" , data)
}, [data])
問你一個問題:你為什么把你的用戶界面放在 state 里面?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.