سلام جناب استاد سوری
داخل دو تابع selectFilteredTodos و selectFilterdTodoIds به عنوان ورودی state رو پاس دادیم ولی فقط یه جا selectFilterdTodoIds فراخوانی شد و اونم داخل
const todosIds = useSelector(selectFilterdTodoIds, shallowEqual)
هست
آیا زمانی که ما استیت رو پاس نمیدیم میره از استیت ریداکس استفاده میکنه؟
اگه قراره از استیت ریداکس استفاده کنه مگه قرار نیست خودمون به تابع پاس بدیم؟
export const selectTodos = state => state.todos.entities
export const selectTodosIds = state => Object.keys(state.todos.entities)
const selectFilteredTodos = state => {
const todos = Object.values(selectTodos(state))
const { status, colors } = state.filters
const showAll = status === StatusFilters.All
if (showAll && colors.length === 0) {
return todos
}
const showCompleted = status === StatusFilters.Completed
return todos.filter(todo => {
const statusFilter = showAll || todo.completed === showCompleted
const colorsFilter = colors.length === 0 || colors.includes(todo.color)
return statusFilter && colorsFilter
})
}
export const selectFilterdTodoIds = state => {
const filteredTodos = selectFilteredTodos(state)
return filteredTodos.map(todo => todo.id)
}
سلام
تابع useSelector به عنوان پارامتر اول یه callback (همون تابعی که داریم بهش پاس میدیم) رو دریافت میکن
اگر دقت کرده باشی ما این تابع رو فراخوانی نمیکنیم و فقط رفنرس اون رو پاس میدیم به تابع useSelector
در واقع این تابع useSelector هست که تابعی رو که بهش پاس دادیم رو اجرا میکنه و state رو به عنوان پارامتر اول بهش پاس میده