我有以下代码:
const getAllSlidersUrl = "a url";
const adminID = "an admin id";
const adminlogintoken="a token";
const SliderContainer = () => {
const [allSlides, setAllSlides] = useState([]);
useEffect(
() => {
axios.post(
getAllSlidersUrl,
{
adminid: adminID,
token: adminlogintoken
}
)
.then(
(response) => {
setAllSlides(response.data);
}
)
.catch(
(error) => {
alert(error);
}
)
}, []
);
return (
//I have a button here
//when I press button it executes the following:
{
allSlides.map(
item =>
<div key={item.slider_id} style={{ paddingTop: "10px", paddingBottom: "10px" }}>
<SliderComponent
adminId={adminID}
adminLoginToken={adminlogintoken}
sliderID={item.slider_id}
sliderImage={item.slider_image}
sliderEnText={item.slider_en_text}
sliderArText={item.slider_ar_text}
sliderEnButtonText={item.slider_en_button_text}
sliderArButtonText={item.slider_ar_button_text}
sliderEnButtonLink={item.slider_en_button_link}
sliderArButtonLink={item.slider_ar_button_link}
deleteSliderOnClick={deleteSliderHandler}
updateSliderToAllSlides={updatingSliderHandler}
/>
</div>
)
}
);
}
当我登录页面并按 F12(给我检查选项卡)时,有时一切都很好,我没有收到任何警告,但大多数时候我收到以下警告:
Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
并且每当出现此警告并且我按下按钮时,应用程序就会中断并且出现错误:allSlides.map is not a function
我尝试在钩子return () => {}
末尾添加,我还尝试更改为以下内容:useEffect
useEffect
useEffect(
() => {
let isSubscribed = true;
axios.post(
getAllSlidersUrl,
{
adminid: adminID,
token: adminlogintoken
}
)
.then(
(response) => {
if(isSubscribed){
setAllSlides(response.data);
}
}
)
.catch(
(error) => {
alert(error);
}
)
return () => {isSubscribed = false}
}, []
);
但是在我尝试解决错误的两种情况下,它都没有解决它。
请注意,无论出于何种原因(在所有 3 种情况下),有时 Web 应用程序都不会中断并且一切正常,但大多数情况下,如果我按下按钮,我会收到警告,然后是错误。