আমি চাই যে ব্যবহারকারী টোড আইটেমগুলির একটি তালিকা বাছাই করতে সক্ষম হবে। ব্যবহারকারীরা যখন ড্রপডাউন থেকে কোনও আইটেম নির্বাচন করেন এটি সেট করে sortKey
যা এর নতুন সংস্করণ তৈরি করবে এবং ফলস্বরূপ কল এবং কলটি setSortedTodos
ট্রিগার করবে ।useEffect
setSortedTodos
নীচের উদাহরণটি ঠিক কীভাবে আমি চাই তা কাজ করে তবে এসলিন্ট আমাকে নির্ভরতা অ্যারেতে যুক্ত todos
করতে অনুরোধ জানায় useEffect
এবং যদি আমি এটি করি তবে এটি একটি অসীম লুপের কারণ হয় (যেমনটি আপনি আশা করবেন)।
const [todos, setTodos] = useState([]);
const [sortKey, setSortKey] = useState('title');
const setSortedTodos = useCallback((data) => {
const cloned = data.slice(0);
const sorted = cloned.sort((a, b) => {
const v1 = a[sortKey].toLowerCase();
const v2 = b[sortKey].toLowerCase();
if (v1 < v2) {
return -1;
}
if (v1 > v2) {
return 1;
}
return 0;
});
setTodos(sorted);
}, [sortKey]);
useEffect(() => {
setSortedTodos(todos);
}, [setSortedTodos]);
সরাসরি উদাহরণ:
আমি ভাবছি এটি করার আরও ভাল উপায় থাকতে হবে যা এস্লিন্টকে খুশি রাখে।
eslint
নিক্ষেপ করা হয়?
[<>]
? স্ট্যাক স্নিপেটস জেএসএক্স সহ প্রতিক্রিয়া সমর্থন করে; এখানে একটি করতে হয় । এইভাবে লোকেরা পরীক্ষা করতে পারবেন যে তাদের প্রস্তাবিত সমাধানগুলিতে অসীম লুপ সমস্যা নেই ...
todos
নির্ভরতা অ্যারেতে যুক্ত করা দরকার useEffect
এবং আপনি কেন তা করবেন না তা দেখতে পারেন। :-)
sort
কলব্যাকটি ঠিক হতে পারে:return a[sortKey].toLowerCase().localeCompare(b[sortKey].toLowerCase());
পরিবেশে যুক্তিসঙ্গত লোকেল তথ্য থাকলে লোকাল তুলনা করার সুবিধাও রয়েছে। আপনি যদি পছন্দ করেন তবে এটিতেও কাঠামো