【问题标题】:React native component not updating its state while rendering反应原生组件在渲染时不更新其状态
【发布时间】:2022-01-12 08:50:24
【问题描述】:

单击下一本书按钮时,我正在尝试从 redux 中逐一呈现单本书。我通过使用下面的代码实现了它,但问题是当我尝试在书签中添加一些书并单击下一本书然后下一本书星也显示为橙色(这是书签状态)。我还尝试将书签 btn 代码作为组件,以便其当前状态不会显示在下一本书中,但仍会显示。我该如何克服这个问题。附上问题图片。 bookmarked state normal state

const renderBooks = totalBooks?.books?.length && totalBooks?.books[bookIndex] && <View>
    <View style={styles.spaceBetween}>
      <TouchableOpacity onPress={() => navigation.goBack()}><AntDesign name="arrowleft" size={28} color="#0b466b" /></TouchableOpacity>
      <Bookmark
        book={totalBooks?.books[bookIndex]}
      />
    </View>
    <ImageBackground source={totalBooks?.books[bookIndex].cover ? {uri: totalBooks?.books[bookIndex].cover} : BookCover} style={styles.bookCover}>

    </ImageBackground>
    <Text style={styles.bookTitle}>{totalBooks?.books[bookIndex].title}</Text>
    <ScrollView style={styles.bookDescriptionContainer} contentContainerStyle={{flexGrow: 1}}>
      <Text style={styles.bookDescription}>
        Lorem Ipsum is not simply random text. 
      </Text>
    </ScrollView>
    <View style={styles.actionBtnsContainer}>
      <TouchableOpacity onPress={() => setOptionsPopUp(true)}>
        <Text style={styles.buyItBtn}>Buy it</Text>
      </TouchableOpacity>
      <TouchableOpacity onPress={() => nextBook()}>
        <Text style={styles.readItBtn}>Next Book</Text>
      </TouchableOpacity>
    </View>
<View>


const [addToBookmark, setAddToBookmark] = useState(false);
  
  const handleBookmarks = () => {
    const myBookmark = addToBookmark;
    setAddToBookmark(!myBookmark)
    if(!myBookmark) {
      console.log('Add')
      addInBookmarks(book)
    } else {
      console.log('remove')
      removeFromBookmarks(book)
    }
  }

  useEffect(() => {

  }, [addToBookmark])

  return(
    <TouchableOpacity onPress={handleBookmarks}>
      <AntDesign name={addToBookmark ? "star" : "staro"} size={24} color={addToBookmark ? "#ff910c" : "#0b466b"} />
    </TouchableOpacity>
  );

【问题讨论】:

    标签: javascript react-native components rendering redux-thunk


    【解决方案1】:

    nextBook() 函数中,您可以尝试设置setAddToBookmark(false) 的状态,或者如果图书被标记,则可以根据您的数据将状态设置为 false 或 true

    【讨论】:

    • 状态正在改变,但是当我点击下一本书按钮时,之前的状态会转发到下一本书,这是错误的。我还尝试将代码放入单独的组件中,但它不起作用。只是看着附图中显示的填充星和空星
    • 你能显示函数 nextBook() 吗?
    • 我只是在 bookIndex 中 +1 来渲染下一本书。 renderBook 函数写在第一行代码中。 totalBooks.books[bookIndex] totalBooks 来自 reducer,其中有一个名为 books 的数组,并且 bookIndex 每次用户点击 nextBook 时都会发生变化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2021-10-15
    相关资源
    最近更新 更多