Reactjs 如何更改反冲选择器中的状态
我试图改变选择器中的状态,类似于正常的状态改变,但我不知道我做错了什么。有人能帮我吗 这是我的原子:Reactjs 如何更改反冲选择器中的状态,reactjs,typescript,recoiljs,Reactjs,Typescript,Recoiljs,我试图改变选择器中的状态,类似于正常的状态改变,但我不知道我做错了什么。有人能帮我吗 这是我的原子: export interface iBook { id: number; title: string; } const initState: iBook[] = [{ id: 1, title: "a" }]; export const bookState = atom({ key: "bookState", default: init
export interface iBook {
id: number;
title: string;
}
const initState: iBook[] = [{ id: 1, title: "a" }];
export const bookState = atom({
key: "bookState",
default: initState,
});
而现在,这个选择器不起作用了
export const onChange = selector({
key: "onChange",
get: ({ get }) => get(bookState),
set: ({ set, get }, id) => {
const books= get(bookState);
set(
bookState,
books.map((book) => {
if (book.id === id)
return {
...book,
title: "b",
};
})
);
},
});
它在“bookState”上显示错误
“RecoilState”类型的参数不可分配给
类型为“RecoilState”的参数。属性“\uuu cTag”的类型不兼容。
Type'(t:iBook[])=>void'不能分配给Type'(t:({title:string;id:number;}|未定义)[])=>void'。
参数“t”和“t”的类型不兼容。
类型“({title:string;id:number;}|未定义)[]”不能分配给类型“iBook[]”。TS2345
这是钩子,它在组件中工作,但我希望它在选择器中:
setBooks(
books.map((book) => {
if (book.id === id)
return {
...book,
title: "b",
};
return book;
})
);
如果id不匹配,则不会返回book对象,因此返回undefined。返回图书对象:
export const onChange=选择器({
密钥:“onChange”,
get:({get})=>get(bookState),
set:({set,get},id)=>{
const books=get(bookState);
设置(
书州,
图书。地图((图书)=>{
如果(book.id==id){
返回{
…书,
标题:“b”,
};
}
还书;
})
);
},
});
谢谢,这很有帮助。这不是一个好的做法。你的选择器对我来说毫无意义。我不明白你想达到什么目的。但是选择器应该总是派生状态,这就是为什么它被称为选择器。那么,当在不同的组件中使用相同的代码来更改原子时,我如何优化代码呢?只需编写一个带有回调的自定义钩子就可以了。