Javascript 在React中的类组件开头声明变量时出错
我想知道为什么我把_isMounted=false;myClass开头出现以下错误:SyntaxError:意外标记。我在这个线程中遵循第二个答案: 谢谢你的帮助 这是我的代码,我正在尝试上面的代码来修复以下错误:无法对未安装的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请从以下代码中取消componentWillUnmount方法中的所有订阅和异步任务:Javascript 在React中的类组件开头声明变量时出错,javascript,reactjs,Javascript,Reactjs,我想知道为什么我把_isMounted=false;myClass开头出现以下错误:SyntaxError:意外标记。我在这个线程中遵循第二个答案: 谢谢你的帮助 这是我的代码,我正在尝试上面的代码来修复以下错误:无法对未安装的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请从以下代码中取消componentWillUnmount方法中的所有订阅和异步任务: import React, {Component} from 'react' const
import React, {Component} from 'react'
const months = ["January", "February", "March", "April", "May", "June", "July", "August"," September", "November", "December"]
const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
const usaTime = new Date().toLocaleString("en-US", {timeZone: "America/New_York"})
const d = new Date(usaTime)
export default class DateTime extends React.Component {
constructor() {
super()
this.state = {
day: d.getDay(),
month: d.getMonth(),
date: d.getDate(),
year: d.getFullYear(),
time: d.toLocaleTimeString()
}
this.countingSecond = this.countingSecond.bind(this)
}
countingSecond() {
this.setState({
day: d.getDay(),
month: d.getMonth(),
date: d.getDate(),
year: d.getFullYear(),
time: d.toLocaleTimeString()
})
}
componentDidMount() {
setInterval(this.countingSecond, 1000)
}
componentWillUnmount(){
// setInterval(this.countingSecond, 1000)
}
render() {
return(
<div className="timeclock-main">
<h5>{days[this.state.day] + ', ' + months[this.state.month] + ' ' + this.state.date + ', ' + this.state.year }</h5>
<h3>{this.state.time}</h3>
</div>
)
}
}
发件人:
如果您熟悉React类生命周期方法,您可以
将效果挂钩用作componentDidMount、componentDidUpdate和
组件将联合卸载
要检查isMounted=true | | false,可以使用useRef:
编辑-您的工作组件:
const DateTime = (props) =>{
const initialMonths = ["January", "February", "March", "April", "May", "June", "July", "August"," September", "November", "December"]
const initialDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
const usaTime = new Date().toLocaleString("en-US", {timeZone: "America/New_York"})
const d = new Date(usaTime)
const[days, setDays] = useState(d.getDay())
const[months, setMonths] = useState(d.getMonth())
const[year, setYear] = useState(d.getFullYear())
const[date, setDate] = useState(d.getDate())
const [time, setTime] = useState()
useEffect(() => {
setTime(d.toLocaleTimeString())
const id = setInterval(() => { setTime(time+1) }, 1000); return () => clearInterval(id); }, [time]
)
return (<>
<h5>{initialDays[days] + ', ' + initialMonths[months] + ' ' + date + ', ' + year }</h5>
{time}
</>);
}
export default DateTime;
如果我没有使用UseEffect钩子怎么可能?你想实现什么?我有一个显示时间的组件。我在componentDidMount中有一个函数setInterval,我需要修复错误:无法对未安装的组件执行反应状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请取消componentWillUnmount方法中的所有订阅和异步任务。我寻找修复程序,并在这个线程上尝试了第二个答案:无法对未安装的组件执行React状态更新。你明白吗?当我看到代码及其工作原理时,我会更好地理解-然后我就能找到解决方案。你是否尝试添加此项。_ismounted=true;在componentDidMount?中,将东西放在一边,您很少需要这样的东西。你在用什么巴贝尔变换?
const Test = () => {
const componentIsMounted = useRef(true)
useEffect(() => {
return () => {
componentIsMounted.current = false
}
}, [])
return (
<div>
test
</div>
);
}
export default Test;
componentDidMount() {
this._ismounted = true;
}
componentWillUnmount() {
this._ismounted = false;
}
const DateTime = (props) =>{
const initialMonths = ["January", "February", "March", "April", "May", "June", "July", "August"," September", "November", "December"]
const initialDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
const usaTime = new Date().toLocaleString("en-US", {timeZone: "America/New_York"})
const d = new Date(usaTime)
const[days, setDays] = useState(d.getDay())
const[months, setMonths] = useState(d.getMonth())
const[year, setYear] = useState(d.getFullYear())
const[date, setDate] = useState(d.getDate())
const [time, setTime] = useState()
useEffect(() => {
setTime(d.toLocaleTimeString())
const id = setInterval(() => { setTime(time+1) }, 1000); return () => clearInterval(id); }, [time]
)
return (<>
<h5>{initialDays[days] + ', ' + initialMonths[months] + ' ' + date + ', ' + year }</h5>
{time}
</>);
}
export default DateTime;