通过一个屏幕将功能从一个屏幕传递到另一个屏幕

发布于 2025-02-11 12:12:58 字数 1456 浏览 1 评论 0原文

我试图通过我的homescreen homeScreen 通过我的nefacs nevety> select> select> selects -screen 通过我的favouritelist state narray state rane 通过导航参数,但即时通知到以下错误:在导航状态中找到了不可隔离的值>

我应该如何通过在不同堆栈屏幕之间修改状态的函数?

房屋屏幕代码:

<FlatList
        data={checkCategory()}
        renderItem={({item}) => (
          <TouchableOpacity
            onPress={() =>
              navigation.navigate('Details', {
                item,
                handleNewFavourite,
              })
            }>
            <LessonCard lesson={item} />
          </TouchableOpacity>
        )}
/>

细节屏幕代码:

const LessonDetails = ({lesson, handleNewFavourite}: LessonProps) => {
  const [favourite, setFavourite] = useState<boolean>(lesson.favourite);
  return (
    <LessonDetailsContainer>
      <LessonDetailsInfoContainer>
        <LessonDetailsCategoryHead>
          <LessonDetailsCategory>{lesson.category}</LessonDetailsCategory>
          <TouchableOpacity
            onPress={() => {
              setFavourite(!favourite);
              handleNewFavourite(lesson);
            }}>
            <LessonDetailsFavouriteIcon>
              {favourite ? '❤️' : '
              

Im trying to pass a function handleNewFavourite (which updates my favouriteList state array) from my HomeScreen to my DetailsScreen via navigation params but Im getting the following error: Non-serializable values were found in the navigation state

How should I pass functions that modified the state between different stack screens?

HomeScreen code:

<FlatList
        data={checkCategory()}
        renderItem={({item}) => (
          <TouchableOpacity
            onPress={() =>
              navigation.navigate('Details', {
                item,
                handleNewFavourite,
              })
            }>
            <LessonCard lesson={item} />
          </TouchableOpacity>
        )}
/>

DetailScreen code:

const LessonDetails = ({lesson, handleNewFavourite}: LessonProps) => {
  const [favourite, setFavourite] = useState<boolean>(lesson.favourite);
  return (
    <LessonDetailsContainer>
      <LessonDetailsInfoContainer>
        <LessonDetailsCategoryHead>
          <LessonDetailsCategory>{lesson.category}</LessonDetailsCategory>
          <TouchableOpacity
            onPress={() => {
              setFavourite(!favourite);
              handleNewFavourite(lesson);
            }}>
            <LessonDetailsFavouriteIcon>
              {favourite ? '❤️' : '????'}
            </LessonDetailsFavouriteIcon>
          </TouchableOpacity>
        </LessonDetailsCategoryHead>
        <LessonDetailsTitle>{lesson.title}</LessonDetailsTitle>
        <LessonDetailsAuthor>{lesson?.author}</LessonDetailsAuthor>
      </LessonDetailsInfoContainer>
      <LessonDetailsCardImage
        source={{
          uri: lesson.image,
        }}
      />
      <LessonDetailsContentContainer>
        <LessonDetailsDescriptionText>
          {lesson.content}
        </LessonDetailsDescriptionText>
      </LessonDetailsContentContainer>
    </LessonDetailsContainer>
  );
};

export default LessonDetails;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

站稳脚跟 2025-02-18 12:12:58

对于这种情况,您应该学习全球国家管理。 (上下文API- redux等)

For situation like this, you should learn global state management. ( Context API - Redux etc. )

倾城泪 2025-02-18 12:12:58

我认为您以错误的方式破坏了传递给详细信息的参数应该是这样的:

const LessonDetails = ({route}: LessonProps) => {
      const {lesson, handleNewFavourite} = route.params;
// The rest of your component here
}

作为文档在这里建议。但是,正如@Omerfarukose所提到的那样,在这种特定情况下使用状态管理并不是一个坏主意

I think you are disrupting in the wrong way the parameters passed to DetailScreen it should be something like this:

const LessonDetails = ({route}: LessonProps) => {
      const {lesson, handleNewFavourite} = route.params;
// The rest of your component here
}

As the documentation here suggested. But as @omerfarukose mentioned is not a bad idea to use state management in this particular scenario

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文