React-Redux:将数量值添加到 order/cart 中的 table
React-Redux: Add quantity value to a table in order/cart
我正在尝试创建采购订单屏幕,但在添加产品数量时遇到问题。
工作流程
a) 从状态中获取产品详细信息并进入下拉列表。 Select 下拉列表中的产品
b) 在文本字段中添加数量。点击添加
c)这会将产品详细信息添加到 table.
但是我不确定如何为每个选择的产品设置一个固定数量。
现在我不确定如何将数量添加到所选产品中。
对不起,代码可能搞砸了,我还在学习中。添加下面的代码。
let count=0;
const [validated, setValidated] = useState(false);
const dispatch = useDispatch()
const [medicineName, setMedicineName] = useState('')
const [quantity, setQuantity] = useState(0)
const [tableData, setTableData] = useState([])
const productList = useSelector( state => state.productList )
const { loading, error, products } = productList
const userLogin = useSelector(state => state.userLogin)
const {userInfo} = userLogin
const [dropDownData, setDropDownData] = useState(products)
useEffect(()=>{
setDropDownData(products)
},[products])
useEffect(() => {
if(!userInfo){
history.push('/login')
}
dispatch(listProducts())
},[dispatch, history, userInfo])
const submitHandler = (e) => {
e.preventDefault()
const arr = dropDownData.filter((product) =>
product.medicineName.toLowerCase().indexOf(medicineName.toLowerCase()) > -1)
setTableData(tableData => tableData.concat(arr))
const arr2 = dropDownData.filter((product) =>
product.medicineName.toLowerCase().indexOf(medicineName.toLowerCase()))
setDropDownData(arr2)
}
return(
<>
<h2>PurchaseOrderScreen</h2>
<Form onSubmit={submitHandler} validated={validated} noValidate>
<Row>
<Col md={7}>
<Form.Group controlId='medicineName'>
<FloatingLabel controlId="floatingSelect" label="Medicine">
<Form.Control as='select' value={medicineName} className="mb-3"
onChange={(e) => setMedicineName(e.target.value)}
required
>
<option value=''>Select Medicine</option>
{dropDownData.map(product => (
<option value={product.medicineName}>{product.medicineName}</option>
)) }
</Form.Control>
</FloatingLabel>
</Form.Group>
</Col>
<Col md={3}>
<Form.Group className="mb-3" controlId='quantity'>
<FloatingLabel controlId="floatingInput" label="Quantity" >
<Form.Control type="text" placeholder="Quantity"
value={quantity}
onChange = {(e)=> setQuantity(e.target.value)}
required
/>
</FloatingLabel>
</Form.Group>
</Col>
<Col md={2}>
<Button type='submit' variant='primary'>
>Add
</Button>
</Col>
</Row>
</Form>
<Table striped bordered hover responsive='md' className='table-sm mt-3' id="table-to-xls">
<thead>
<tr>
<th><span className='btn'>Remove</span></th>
<th ><span className='btn'>Sl</span></th>
<th ><span className='btn'>Medicine</span></th>
<th ><span className='btn'>C.stock</span></th>
<th ><span className='btn'>Quantity</span></th>
<th ><span className='btn'>Low Stock</span></th>
<th ><span className='btn'>Reorder Quantity</span></th>
</tr>
</thead>
<tbody>
{tableData.map(product => (
<tr key={product._id} >
<td> X </td>
<td>{count+1}</td>
<td>{product.medicineName}</td>
<td>{product.currentStock}</td>
<td>{quantity}</td>
<td>{product.lowStockValue}</td>
<td>{product.reOrderValue}</td>
</tr>
)) }
</tbody>
</Table>
请问如何增加数量。如果您需要任何详细信息,请告诉我。
为了将数量添加到 table,您需要将其存储在某处。您有一个名为 tableData
的数组,您当前正在向其中添加产品。也许您可以添加一个对象而不是添加产品:
// Inside the submitHandler function
const productToAdd = dropDownData.find((product) =>
product.medicineName.toLowerCase().indexOf(medicineName.toLowerCase()) > -1);
const rowToAdd = {product: productToAdd, quantity: quantity};
setTableData(tableData => [...tableData, rowToAdd])
然后在您的渲染中:
{tableData.map(row => (
<tr key={row.product._id} >
<td> X </td>
<td>{count+1}</td>
<td>{row.product.medicineName}</td>
<td>{row.product.currentStock}</td>
<td>{row.quantity}</td>
<td>{row.product.lowStockValue}</td>
<td>{row.product.reOrderValue}</td>
</tr>
)) }
我正在尝试创建采购订单屏幕,但在添加产品数量时遇到问题。
工作流程 a) 从状态中获取产品详细信息并进入下拉列表。 Select 下拉列表中的产品 b) 在文本字段中添加数量。点击添加 c)这会将产品详细信息添加到 table.
但是我不确定如何为每个选择的产品设置一个固定数量。
现在我不确定如何将数量添加到所选产品中。 对不起,代码可能搞砸了,我还在学习中。添加下面的代码。
let count=0;
const [validated, setValidated] = useState(false);
const dispatch = useDispatch()
const [medicineName, setMedicineName] = useState('')
const [quantity, setQuantity] = useState(0)
const [tableData, setTableData] = useState([])
const productList = useSelector( state => state.productList )
const { loading, error, products } = productList
const userLogin = useSelector(state => state.userLogin)
const {userInfo} = userLogin
const [dropDownData, setDropDownData] = useState(products)
useEffect(()=>{
setDropDownData(products)
},[products])
useEffect(() => {
if(!userInfo){
history.push('/login')
}
dispatch(listProducts())
},[dispatch, history, userInfo])
const submitHandler = (e) => {
e.preventDefault()
const arr = dropDownData.filter((product) =>
product.medicineName.toLowerCase().indexOf(medicineName.toLowerCase()) > -1)
setTableData(tableData => tableData.concat(arr))
const arr2 = dropDownData.filter((product) =>
product.medicineName.toLowerCase().indexOf(medicineName.toLowerCase()))
setDropDownData(arr2)
}
return(
<>
<h2>PurchaseOrderScreen</h2>
<Form onSubmit={submitHandler} validated={validated} noValidate>
<Row>
<Col md={7}>
<Form.Group controlId='medicineName'>
<FloatingLabel controlId="floatingSelect" label="Medicine">
<Form.Control as='select' value={medicineName} className="mb-3"
onChange={(e) => setMedicineName(e.target.value)}
required
>
<option value=''>Select Medicine</option>
{dropDownData.map(product => (
<option value={product.medicineName}>{product.medicineName}</option>
)) }
</Form.Control>
</FloatingLabel>
</Form.Group>
</Col>
<Col md={3}>
<Form.Group className="mb-3" controlId='quantity'>
<FloatingLabel controlId="floatingInput" label="Quantity" >
<Form.Control type="text" placeholder="Quantity"
value={quantity}
onChange = {(e)=> setQuantity(e.target.value)}
required
/>
</FloatingLabel>
</Form.Group>
</Col>
<Col md={2}>
<Button type='submit' variant='primary'>
>Add
</Button>
</Col>
</Row>
</Form>
<Table striped bordered hover responsive='md' className='table-sm mt-3' id="table-to-xls">
<thead>
<tr>
<th><span className='btn'>Remove</span></th>
<th ><span className='btn'>Sl</span></th>
<th ><span className='btn'>Medicine</span></th>
<th ><span className='btn'>C.stock</span></th>
<th ><span className='btn'>Quantity</span></th>
<th ><span className='btn'>Low Stock</span></th>
<th ><span className='btn'>Reorder Quantity</span></th>
</tr>
</thead>
<tbody>
{tableData.map(product => (
<tr key={product._id} >
<td> X </td>
<td>{count+1}</td>
<td>{product.medicineName}</td>
<td>{product.currentStock}</td>
<td>{quantity}</td>
<td>{product.lowStockValue}</td>
<td>{product.reOrderValue}</td>
</tr>
)) }
</tbody>
</Table>
请问如何增加数量。如果您需要任何详细信息,请告诉我。
为了将数量添加到 table,您需要将其存储在某处。您有一个名为 tableData
的数组,您当前正在向其中添加产品。也许您可以添加一个对象而不是添加产品:
// Inside the submitHandler function
const productToAdd = dropDownData.find((product) =>
product.medicineName.toLowerCase().indexOf(medicineName.toLowerCase()) > -1);
const rowToAdd = {product: productToAdd, quantity: quantity};
setTableData(tableData => [...tableData, rowToAdd])
然后在您的渲染中:
{tableData.map(row => (
<tr key={row.product._id} >
<td> X </td>
<td>{count+1}</td>
<td>{row.product.medicineName}</td>
<td>{row.product.currentStock}</td>
<td>{row.quantity}</td>
<td>{row.product.lowStockValue}</td>
<td>{row.product.reOrderValue}</td>
</tr>
)) }