首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按钮被按下时,React Native不更新图标

按钮被按下时,React Native不更新图标
EN

Stack Overflow用户
提问于 2021-08-07 10:41:36
回答 1查看 46关注 0票数 0

我正在使用react-native-vector-icons,并且我想在按下按钮时更改图标。

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-07 10:54:20

你的问题是你以错误的方式添加项目。你不能直接改变状态。只需像这样更新:

代码语言:javascript
运行
复制
  if (favorites.includes(lineNumber)) {
    newFavorites = newFavorites.filter(favorite => favorite !== lineNumber);
  } else {
    newFavorites = [...favorites, lineNumber]
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68691632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档