我可以在 return 语句中使用 setTimeout
Can I use setTimeout in a return statement
如何在功能组件的 return 语句中 setTimeout
/setInterval
。
我有一个可重复使用的组件,我喜欢使用 setInterval
在每个设定的时间刷新它。
这是组件:
function LikedBTN({ item }) {
const handleLike = (id, action) => {
var action = "like";
setLiked(true);
client
.post("/pop/like/", { id, action })
.then((res) => {
// setLoading(false);
})
.catch((err) => {
// setError(err);
// setLoading(false);
});
};
const handleUnlike = (id, action) => {
var action = "unlike";
setLiked(false);
console.log(id, action);
client
.post("/pop/like/", { id, action })
.then((res) => {
// setLoading(false);
})
.catch((err) => {
// setError(err);
// setLoading(false);
});
};
return (
<View
style={{
flexDirection: "row",
justifyContent: "flex-end",
textAlignVertical: "center",
textAlign: "center",
paddingTop: 8,
}}
>
// setInterval(() => { --------------------- This is where I will like to use the setInterval
{item.is_liked && (
<>
<AppText style={styles.like}>
{item.likess}
</AppText>
<TouchableWithoutFeedback onPress={() => handleUnlike(item.id)}>
<View
style={{
width: 45,
height: 45,
marginLeft: -9,
marginRight: -10,
marginTop: -15,
}}
>
<LottieView
autoPlay
loop={false}
source={require("../assets/animations/like-burst.json")}
/>
</View>
</TouchableWithoutFeedback>
</>
)}
{!item.is_liked && (
<>
<AppText style={styles.like}>{item.likess}</AppText>
<TouchableWithoutFeedback onPress={() => handleLike(item.id)}>
<MaterialCommunityIcons
style={styles.chipsIcon}
name="heart-outline"
color={colors.mediumgray}
size={21}
/>
</TouchableWithoutFeedback>
</>
)}
// }, 1000); ------------------------ and end it here.
</View>
);
}
export default LikedBTN;
如果有任何帮助,我将不胜感激。
React 根本不是这样的结构。您不想手动重新呈现组件(您尝试这样做的方式只是一个语法错误)。您想要更新状态。
目前您要更改的状态似乎是:
item.is_liked
作为 prop 传递给组件:
function LikedBTN({ item }) {
所以大概你的组件在这样的地方使用:
<LikedBTN item={someItem} />
由于“项目”是在父组件中维护的,因此需要在该父组件中对其进行更新。一种方法是将回调函数作为另一个道具传递。所以你会像这样公开一个道具:
function LikedBTN({ item, onLike }) {
并在 AJAX 操作成功完成时调用该函数:
client
.post("/pop/like/", { id, action })
.then((res) => {
onLike && onLike();
})
然后父组件会提供一个函数来更新它的状态。例如:
<LikedBTN
item={someItem}
onLike={() => {
// update the state of "someItem" here
}}
/>
因此,由维护“项目”状态的组件来更新该状态。 LikedBTN
需要提供一个在需要更新状态时调用的回调。
如何在功能组件的 return 语句中 setTimeout
/setInterval
。
我有一个可重复使用的组件,我喜欢使用 setInterval
在每个设定的时间刷新它。
这是组件:
function LikedBTN({ item }) {
const handleLike = (id, action) => {
var action = "like";
setLiked(true);
client
.post("/pop/like/", { id, action })
.then((res) => {
// setLoading(false);
})
.catch((err) => {
// setError(err);
// setLoading(false);
});
};
const handleUnlike = (id, action) => {
var action = "unlike";
setLiked(false);
console.log(id, action);
client
.post("/pop/like/", { id, action })
.then((res) => {
// setLoading(false);
})
.catch((err) => {
// setError(err);
// setLoading(false);
});
};
return (
<View
style={{
flexDirection: "row",
justifyContent: "flex-end",
textAlignVertical: "center",
textAlign: "center",
paddingTop: 8,
}}
>
// setInterval(() => { --------------------- This is where I will like to use the setInterval
{item.is_liked && (
<>
<AppText style={styles.like}>
{item.likess}
</AppText>
<TouchableWithoutFeedback onPress={() => handleUnlike(item.id)}>
<View
style={{
width: 45,
height: 45,
marginLeft: -9,
marginRight: -10,
marginTop: -15,
}}
>
<LottieView
autoPlay
loop={false}
source={require("../assets/animations/like-burst.json")}
/>
</View>
</TouchableWithoutFeedback>
</>
)}
{!item.is_liked && (
<>
<AppText style={styles.like}>{item.likess}</AppText>
<TouchableWithoutFeedback onPress={() => handleLike(item.id)}>
<MaterialCommunityIcons
style={styles.chipsIcon}
name="heart-outline"
color={colors.mediumgray}
size={21}
/>
</TouchableWithoutFeedback>
</>
)}
// }, 1000); ------------------------ and end it here.
</View>
);
}
export default LikedBTN;
如果有任何帮助,我将不胜感激。
React 根本不是这样的结构。您不想手动重新呈现组件(您尝试这样做的方式只是一个语法错误)。您想要更新状态。
目前您要更改的状态似乎是:
item.is_liked
作为 prop 传递给组件:
function LikedBTN({ item }) {
所以大概你的组件在这样的地方使用:
<LikedBTN item={someItem} />
由于“项目”是在父组件中维护的,因此需要在该父组件中对其进行更新。一种方法是将回调函数作为另一个道具传递。所以你会像这样公开一个道具:
function LikedBTN({ item, onLike }) {
并在 AJAX 操作成功完成时调用该函数:
client
.post("/pop/like/", { id, action })
.then((res) => {
onLike && onLike();
})
然后父组件会提供一个函数来更新它的状态。例如:
<LikedBTN
item={someItem}
onLike={() => {
// update the state of "someItem" here
}}
/>
因此,由维护“项目”状态的组件来更新该状态。 LikedBTN
需要提供一个在需要更新状态时调用的回调。