سلام دوستان
دوستان من یک array داخل کد دارم که با map کردن به تعداد آیتم های موجود در آرایه Button ایجاد میکنم.
حالا مشکل من اینجاست که میخوام با کلیک کردن روی یکی از دکمه ها اون دکمه disable بشه.ولی با disable کردن دکمه همه دکمه های disable میشه.
چطور میتونم دکمه ای که فقط کلیک شده رو disable کنم.
یه جا خوندم که باید به تعداد آیتم های آرایه state ایجاد کنم و هر کدوم رو به یک button نسبت بدم(به disabled باتن).ولی خب چیز زیادی ازش متوجه نشدم.
ممنون میشم ترجیحا functional component توضیح بدید.
مچکر
const [disabled, setDisabled] = useState();
return (
<View>
{array.map((item, key) => {
return (
<View>
<Button disabled={disabled} onPress={() => (
setDisabled('true'))
}/>
</View>
);
})}
</View>
)
ضمنا کامپوننت Button کامپوننت کاستومایز شده خودمه
جوابش رو خودم پیدا کردم اینجا مینویسم شاید به درد کسی خورد.
نکتش اینجاست که ما استیت disabled رو نباید به صورت بولین در نظر بگیریم.بلکه key کامپوننت رو برابر اون قرار میدیم و بعدش توی شرط بررسی میکنیم اگه key کامپوننت برابر بود با مقدار disabled اون کامپوننت disable بشه.
const [disabled, setDisabled] = useState();
return (
<View>
{array.map((item, key) => {
return (
<View>
<Button disabled={disabled === key} onPress={() => (
setDisabled(key))
}/>
</View>
);
})}
</View>
)
بررسی شرط تو کد زیر انجام میشه
<Button disabled={disabled === key}
ولی خب با هربار کلیک کردن روی دکمه دیگه مقدار disabled تغییر میکنه و دکمه قبلی فعال و دکمه کلیک شده disable میشه.
برای اینکه هر دکمه ای که کلیک میشه disable بشه و دکمه های قبلی هم disable بمونه احتمالا باید استیت disabled یک ارایه باشه و اگه مقدار key داخل اون بود button مورد نظر disable بشه(بررسی شرط داخل پراپس disabled). ولی خب کد بالا به درد کار من میخورد.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟