Chỉnh sửa state trong component cháu trong React
Hãy xem xét component Product mà chúng ta
đã có được trong bài học trước:
function Product({ id, name, cost, isEdit, toggleMode, editProd }) {
return <div>
name: {
isEdit
? <input value={name} onChange={event => editProd(id, 'name', event)} />
: <span>{name}</span>
}
cost: {
isEdit
? <input value={cost} onChange={event => editProd(id, 'cost', event)} />
: <span>{cost}</span>
}
<button onClick={() => toggleMode(id)}>
{isEdit ? 'save': 'edit'}
</button>
</div>;
}
Có thể dễ dàng nhận thấy rằng mã cho tên sản phẩm
và cho giá sản phẩm gần như giống hệt nhau.
Hãy tách mã này ra thành một component riêng biệt
ProductField:
function ProductField({ id, text, type, isEdit, editProd }) {
return isEdit
? <input value={text} onChange={event => editProd(id, type, event)} />
: <span>{text}</span>
;
}
Hãy áp dụng các thay đổi vào component Product:
function Product({ id, name, cost, isEdit, toggleMode, editProd }) {
return <div>
name: <ProductField
id={id}
text={name}
type="name"
isEdit={isEdit}
editProd={editProd}
/>,
cost: <ProductField
id={id}
text={cost}
type="cost"
isEdit={isEdit}
editProd={editProd}
/>
<button onClick={() => toggleMode(id)}>
{isEdit ? 'save': 'edit'}
</button>
</div>;
}
Hãy thực hiện các thao tác tương tự với component
User mà bạn đã tạo trong các bài học trước.