我正在使用react-native-vector-icons,并且我想在按下按钮时更改图标。
const {favorites, toggleFavorite} = useFavorites();
const isFavorite = favorites.includes(value);
return (
...
<Button
icon={
<Icon
name={isFavorite ? 'favorite' : 'favorite-border'}
size={24}
color={theme.colors.text.contrast}
/>
}
onPress={() => toggleFavorite(value)}
type="clear"
/>
export const useFavorites = (): {
favorites: string[];
toggleFavorite: (lineNumber: string) => Promise<void>;
} => {
const [favorites, setFavorites] = useState<string[]>([]);
const readFavorites = async () => {
try {
const value = await AsyncStorage.getItem(FAVORITES_KEY);
setFavorites(value ? value.split(',') : []);
} catch (e) {
console.log(e);
}
};
const toggleFavorite = async (lineNumber: string) => {
let newFavorites = favorites;
if (favorites.includes(lineNumber)) {
newFavorites = newFavorites.filter(favorite => favorite !== lineNumber);
} else {
newFavorites.push(lineNumber);
}
try {
await AsyncStorage.setItem(FAVORITES_KEY, newFavorites.join(','));
setFavorites(newFavorites);
} catch (e) {
console.log(e);
}
};
useEffect(() => {
readFavorites();
}, []);
return {
favorites,
toggleFavorite,
};
};
当我按下按钮时,isFavorite的值被正确地切换。此外,当isFavorite最初为真时,它也可以工作。反之亦然。这里我漏掉了什么?
编辑:添加了更多上下文的useFavorites
发布于 2021-08-07 10:54:20
你的问题是你以错误的方式添加项目。你不能直接改变状态。只需像这样更新:
if (favorites.includes(lineNumber)) {
newFavorites = newFavorites.filter(favorite => favorite !== lineNumber);
} else {
newFavorites = [...favorites, lineNumber]
}
https://stackoverflow.com/questions/68691632
复制相似问题