React တွင် မိဘ component ၏ state ကို ကလေး component မှ တည်းဖြတ်ခြင်း
ယခုကျွန်ုပ်တို့၏ ထုတ်ကုန်များကို input များဖြင့် တည်းဖြတ်ကြပါစို့။ ဤအတွက် ကလေး component ထဲတွင် ခလုတ်တစ်ခု ပြုလုပ်ကြမည်။
ဤခလုတ်ကို ပထမအကြိမ်နှိပ်လိုက်သည့်အခါ ထုတ်ကုန်နှင့်အတူ အမည်နှင့် စျေးနှုန်းအစား ၎င်းတို့ကို တည်းဖြတ်ရန် input များ ပေါ်လာပါစေ၊ ဒုတိယအကြိမ်နှိပ်လိုက်သည့်အခါမှာမှ input များအစား စာသားများ ပြန်ပေါ်လာပါစေ။
ထုတ်ကုန်များပါဝင်သော array ထဲသို့ ပြောင်းလဲမှုတစ်ခု
ထည့်သွင်းကြမည်၊ isEdit ဂုဏ်သတ္တိတစ်ခု ထည့်ခြင်း
(ပြီးလျှင် ရိုးရှင်းစေရန် ဈေးခြင်းလှည်းနှင့် အလုပ်ကို
ဖယ်ရှားလိုက်ခြင်း):
const initProds = [
{id: id(), name: 'product1', cost: 100, isEdit: false},
{id: id(), name: 'product2', cost: 200, isEdit: false},
{id: id(), name: 'product3', cost: 300, isEdit: false},
];
Product Component
ထုတ်ကုန်တွင် တည်းဖြတ်ရန် ခလုတ်တစ်ခု ပြုလုပ်ကြမည်:
function Product({ id, name, cost, isEdit }) {
return <div>
name: <span>{name}</span>
cost: <span>{cost}</span>
<button>edit</button>
</div>;
}
ဤခလုတ်ကို နှိပ်လိုက်သည့်အခါ
မိဘ component မှ လာသော toggleMode
လုပ်ဆောင်ချက်တစ်ခုခု ခေါ်ယူလိမ့်မည်ဟု
ပြုလုပ်ကြပါစို့:
function Product({ id, name, cost, isEdit, toggleMode }) {
return <div>
name: <span>{name}</span>
cost: <span>{cost}</span>
<button onClick={() => toggleMode(id)}>
edit
</button>
</div>;
}
ကျွန်ုပ်တို့တွင် toggleMode အကောင်အထည်ဖော်မှု
မရှိသေးသော်လည်း၊ ၎င်းသည်
မိဘ component ထဲတွင်တည်ရှိမည်၊ သတ်မှတ်ပြောင်းလဲမှုအရ
ထုတ်ကုန်၏ id ကိုလက်ခံမည်နှင့် isEdit
ထုတ်ကုန်၏ဂုဏ်သတ္တိကို ဆန့်ကျင်ဘက်အဖြစ်သို့
ပြောင်းလဲမည်ဟု သိထားသည်။
ခလုတ်၏စာသားသည် နှိပ်သမျှအကြိမ်တိုင်း ပြောင်းလဲသွားစေရန်လည်း ပြုလုပ်ကြမည်:
function Product({ id, name, cost, isEdit, toggleMode }) {
return <div>
name: <span>{name}</span>
cost: <span>{cost}</span>
<button onClick={() => toggleMode(id)}>
{isEdit ? 'save': 'edit'}
</button>
</div>;
}
ယခု တည်းဖြတ်မှုမုဒ်တွင် ကျွန်ုပ်တို့တွင် ဒေတာများနှင့် input များရှိပြီး သာမန်မုဒ်တွင် span များရှိစေရန် ပြုလုပ်ကြပါစို့:
function Product({ id, name, cost, isEdit, toggleMode }) {
return <div>
name: {isEdit ? <input value={name} /> : <span>{name}</span>}
cost: {isEdit ? <input value={cost} /> : <span>{cost}</span>}
<button onClick={() => toggleMode(id)}>
{isEdit ? 'save': 'edit'}
</button>
</div>;
}
ကျွန်ုပ်တို့၏ input များအား onChange
အဖြစ်အပျက်သို့ ချိတ်ဆက်ကြမည်၊
ထို့အတွင်း မိဘဆိုင်ရာ
လုပ်ဆောင်ချက်တစ်ခုခု editProd ကို ခေါ်ယူမည်:
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>;
}
Products Component
ယခု Products component ထဲသို့
ကူးပြောင်းကြပါစို့။
၎င်းထဲတွင် toggleMode လုပ်ဆောင်ချက်ကို
အကောင်အထည်ဖော်ကြမည်:
function toggleMode(id) {
setProds(prods.map(prod => {
if (prod.id === id) {
prod.isEdit = !prod.isEdit;
}
return prod;
}));
}
၎င်းထဲတွင် editProd လုပ်ဆောင်ချက်ကိုလည်း
အကောင်အထည်ဖော်ကြမည်:
function editProd(id, field, event) {
setProds(prods.map(prod => {
if (prod.id === id) {
prod[field] = event.target.value;
}
return prod;
}));
}
ထုတ်ကုန်ပါဝင်သော tag ထဲသို့ ကျွန်ုပ်တို့၏
လုပ်ဆောင်ချက်များ toggleMode နှင့် editProd ကို
�ုဏ်သတ္တိများအဖြစ် လွှဲပြောင်းပေးကြမည်:
const items = prods.map(prod => {
return <Product
key ={prod.id}
id ={prod.id}
name={prod.name}
cost={prod.cost}
isEdit={prod.isEdit}
toggleMode={toggleMode}
editProd={editProd}
/>;
});
Products component ၏ နောက်ဆုံးကုဒ်သည်
�ောက်ပါအတိုင်း ဖြစ်လာမည်:
function Products() {
const [prods, setProds] = useState(initProds);
function toggleMode(id) {
setProds(prods.map(prod => {
if (prod.id === id) {
prod.isEdit = !prod.isEdit;
}
return prod;
}));
}
function editProd(id, field, event) {
setProds(prods.map(prod => {
if (prod.id === id) {
prod[field] = event.target.value;
}
return prod;
}));
}
const result = prods.map(prod => {
return <Product
key ={prod.id}
id ={prod.id}
name={prod.name}
cost={prod.cost}
isEdit={prod.isEdit}
toggleMode={toggleMode}
editProd={editProd}
/>;
});
return <div>
{result}
</div>;
}
လက်တွေ့လေ့ကျင့်ခန်းများ
သင်၏ယခင်သင်ခန်းစာများတွင် ဖန်တီးခဲ့သော
Users နှင့် User component များနှင့်
တူညီသောလုပ်ဆောင်ချက်များကို လုပ်ဆောင်ပါ။