mi estado orderDetail contiene orderDetail json
Obtengo el _id del pedido que quiero eliminar en función, por ejemplo, _id: 60f1ab20891ced4818b5ea87,
ahora quiero eliminar este pedido de la matriz de pedidos que está en orderdetail y actualizar el estado.
orderdetail = { _id: 60f1ab20891ced4818b5ea86, totalPrice: '400', orders: [ { _id: 60f1ab20891ced4818b5ea87, quantity: '1', price: 200, name: 'Caramel Latte', category: 'Steaming Cups' }, { _id: 60f1ab20891ced4818b5ea88, quantity: '1', price: 200, name: 'Cinnamon Latte', category: 'Steaming Cups' } ], confirm: 'done', timestamp: 1626450720332, name: 'xxx', email: 'xxx', }lo que hice fue clonar el estado y luego usar for loop para encontrar un índice del pedido, luego eliminar ese elemento de índice en el clon y luego actualizar el estado para clonar. ¿algún otro método de cómputo menor?
Lo que necesita es establecer un nuevo objeto con la matriz de orders filtrada , así como un nuevo totalPrice .
Por ejemplo
const [orderDetail, setOrderDetail] = useState( /* whatever */ ) const deleteOrder = (id) => { setOrderDetail(prev => { // filter out the order by ID const orders = prev.orders.filter(({ _id }) => _id !== id) return { ...prev, orders, // overwrite orders totalPrice: orders.reduce((total, { quantity, price }) => total + quantity * price, 0), // calculate new total timestamp: Date.now() // perhaps you want to update this too } }) } Esto utiliza la versión de actualización funcional del gancho useState() para acceder fácilmente al valor de estado anterior.