안녕하세요, 저는 현재 화면 A와 화면 B가 2 개 있습니다. 화면 A에는 모든 게시물이 포함 된 플랫리스트가 있으며 특정 게시물을 누르면 해당 게시물의 세부 정보 인 화면 B로 이동합니다.
화면 B에서는 현재 사용자가 게시물을 좋아하는지 여부에 따라 채워지거나 윤곽이 그려지는시기가 변경되는 좋아요 아이콘을 추가했습니다. 현재 사용자가 게시물을 좋아하면 그 기록이 내 데이터베이스에 저장됩니다.
내 문제는 사용자가 화면 B의 게시물을 좋아할 때 하트가 채워지지만 화면 B를 닫고 화면 A로 이동 한 다음 다시 같은 게시물의 화면 B로 이동하면 하트가 여전히 윤곽선으로 표시된다는 것입니다. 내 앱을 다시로드 할 때만 채워짐으로 변경됩니다.
화면 A :
function PostsScreen({navigation}) {
const [posts, setPosts] = useState([]);
const [error, setError] = useState(false);
const [loading, setLoading] = useState(false);
const loadPosts = async () => {
setLoading(true);
const response = await postsApi.getPosts(); //Api call to get all posts from backend
setLoading(false);
if (!response.ok) return setError(true);
setError(false);
setPosts(response.data);
};
useEffect(() => {
loadPosts();
}, []);
return(
<ActivityIndicator visible={loading} />
<FlatList
data={posts}
keyExtractor={(post) => post.id.toString()}
renderItem={({ item }) => (
<Card
title={item.title}
subTitle={item.subTitle}
onPress={() =>
navigation.navigate(routes.POST_DETAILS,item)}
/>
)}
/>
);
}
ScreenB
function PostDetailsScreen({ route }) {
const post = route.params;
const { user} = useAuth();
const [addedToLikes, setAddedToLikes] = useState(post.isLiked);
const[likesCount,setLikesCount]=useState(post.likesCount)
const addToLikes = (PostId,userId) => {
postsApi.likePost({PostId,userId}); //api call to save like in backend
setAddedToLikes(!addedToLikes);
};
let show_likes="";
if(addedToLikes){
show_likes=(likesCount >1)?(("Liked by you")+" and "+(likesCount - 1)+((likesCount ==2)?( "
other"):(" others"))):("Liked by you");
}else if(likesCount >0){
show_likes=(likesCount ==1)?(likesCount+ " like"):(likesCount + " likes");
}
return(
<TouchableOpacity onPress={() => {addToLikes(post.id,user.id)}}>
{addedToLikes?<MaterialCommunityIcons
name="heart"
/>:<MaterialCommunityIcons
name="heart-outline"
/>}
</TouchableOpacity>
<View><TextInput>{show_likes}</TextInput></View>
)}
나는 컨텍스트 또는 redux를 사용하지 않습니다.
누구든지 도움을 줄 수 있다면 대단히 감사하겠습니다. 더 이상 코드가 필요하면 알려주세요.
- 답변 # 1
관련 자료
- javascript - 순수 구성 요소의 React Native 업데이트 FlatList 데이터
- 기본 반응은 FlatList 항목의 일부를 조건부로 렌더링합니다
- React native flatlist - react 네이티브 플랫리스트 - 보낸 메시지와받은 메시지 구분
- reactjs - React Native는 상태를 업데이트하지 않습니다
- React Native Flatlist는 다른 페이지로 이동
- reactjs - 네이티브 반응 - 소비자의 컨텍스트 업데이트는 처음에만 작동합니다
- javascript - React Native에서 Flatlist를 사용하여 데이터가 렌더링되지 않습니다
- 기본 스크롤을 플랫리스트 onChangeText의 맨 위로 반응
- javascript - React Native Cant Find Variable 단순 오류
- FlatList React Native 내에서 문자열 메서드를 사용하는 방법
- xcode - 코드 변경 후 React Native 063이 mainjsbundle을 업데이트하지 않음
- multipleselection - React Native의 목록에서 선택한 여러 항목을 표시하는 방법
- Alertalert는 React 네이티브 iOS에서 작동하지 않지만 Android에서는 완벽하게 작동합니다
- javascript - BorderBottom이 뷰 상단에 React Native를 추가했습니다
- reactjs - react - 새 쿼리로 가져 오기를 업데이트하는 방법
- React Native에서 컨텍스트에 액세스
- React Native로 CameraRoll iOS에서 오는 PHAsset의 경로 가져 오기
- javascript - react native - selecteddaysincludes는 함수가 아닙니다
- javascript - 마커를 누르면 네이티브 맵이 다시 렌더링됩니다
당신은 보낼 수 있습니다
index
과callback
...에post detail
화면콜백 함수를 사용하여 업데이트
list
첫 화면에 기능 추가 및 목록 업데이트