gpt4 book ai didi

javascript - 将 react 类组件转换为功能组件的快速方法?

转载 作者:行者123 更新时间:2023-12-03 09:51:32 25 4
gpt4 key购买 nike

我有一个按预期工作的类组件,但现在我想将这个类组件更改为功能组件

这是我的课

import React, { Component } from 'react'
import EventCalendar from '../App';
import moment from 'moment';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Button from 'react-bootstrap/Button';
import ButtonToolbar from 'react-bootstrap/ButtonToolbar';


const events =[
{
title: 'Womens History Month ',
start: '2020-03-02',
end: '2020-03-02',
//description: '',
url: 'dev91b558163211cf9d2e7d1efe6c3e32035973fdf9',
eventClasses: 'event1'

},
];

export class CalendarDemo extends Component {
constructor(props) {
super(props);

this.state = {
moment: moment(),

};

this.handleNextMonth = this.handleNextMonth.bind(this);
this.handlePreviousMonth = this.handlePreviousMonth.bind(this);
this.handleToday = this.handleToday.bind(this);
this.handleEventClick = this.handleEventClick.bind(this);
this.handleEventMouseOver = this.handleEventMouseOver.bind(this);
this.handleEventMouseOut = this.handleEventMouseOut.bind(this);
this.handleDayClick = this.handleDayClick.bind(this);
}


handleNextMonth() {
this.setState({
moment: this.state.moment.add(1, 'M'),
});
}

handlePreviousMonth() {
this.setState({
moment: this.state.moment.subtract(1, 'M'),
});
}

handleToday() {
this.setState({
moment: moment(),
});
}

handleEventMouseOver(target, eventData, day) {
console.log("event data", target.props.eventData.url);
this.setState({

});
}

handleEventMouseOut(target, eventData, day) {
this.setState({

});
}

handleEventClick(target, eventData, day) {
this.setState({

});
}

handleDayClick(target, day) {
this.setState({

});
}

getMomentFromDay(day) {
return moment().set({
'year': day.year,
'month': (day.month + 0) % 12,
'date': day.day,

});
}

getHumanDate() {
return [moment.months('MM', this.state.moment.month()), this.state.moment.year(), ].join(' ');
}

render() {

return (
<div style={styles}>

<Row className='topBar'>
<Col xs={6}>
<ButtonToolbar>
<Button onClick={this.handlePreviousMonth}>&lt;</Button>
<Button onClick={this.handleNextMonth}>&gt;</Button>
<Button onClick={this.handleToday}>Today</Button>
</ButtonToolbar>
</Col>
<Col xs={6}>
<div className='pull-right h2'>{this.getHumanDate()}</div>
</Col>
</Row>
<br />
<Row>
<Col xs={12}>
<EventCalendar
month={this.state.moment.month()}
year={this.state.moment.year()}
events={events}
onEventClick={this.handleEventClick}
onEventMouseOver={this.handleEventMouseOver}
onEventMouseOut={this.handleEventMouseOut}
onDayClick={this.handleDayClick}
maxEventSlots={0}
/>
</Col>
</Row>

</div>
);
}
}

export default CalendarDemo

const styles = {
position: 'relative',
};

我需要在此处进行哪些更改才能获得功能组件?

最佳答案

每个方法都要改成const method = () => ...,每个生命周期都要改成useState/useEffect >render 应该是功能组件的 return 值。

import React, { Component, useState } from 'react'
import EventCalendar from '../App';
import moment from 'moment';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Button from 'react-bootstrap/Button';
import ButtonToolbar from 'react-bootstrap/ButtonToolbar';


const events =[
{
title: 'Womens History Month ',
start: '2020-03-02',
end: '2020-03-02',
//description: '',
url: 'dev91b558163211cf9d2e7d1efe6c3e32035973fdf9',
eventClasses: 'event1'

},
];

export const CalendarDemo = (props) => {
const [_moment, updateMoment] = useState(moment());

const handleNextMonth = () => {
updateMoment(_moment.add(1, "M").clone());
}

const handlePreviousMonth = () => {
updateMoment(_moment.subtract(1, "M").clone());
}

const handleToday = () => {
updateMoment(moment());
}

const handleEventMouseOver = (target, eventData, day) => {
console.log("event data", target.props.eventData.url);
}

const handleEventMouseOut = (target, eventData, day) => {

}

const handleEventClick = (target, eventData, data) => {

}

const handleDayClick = (target, day) => {

}

const getMomentFromDay = day => {
return moment().set({
'year': day.year,
'month': (day.month + 0) % 12,
'date': day.day,

});
}

const getHumanDate = () => {
return [moment.months('MM', _moment.month()), _moment.year(), ].join(' ');
}

return (
<div style={styles}>

<Row className='topBar'>
<Col xs={6}>
<ButtonToolbar>
<Button onClick={handlePreviousMonth}>&lt;</Button>
<Button onClick={handleNextMonth}>&gt;</Button>
<Button onClick={handleToday}>Today</Button>
</ButtonToolbar>
</Col>
<Col xs={6}>
<div className='pull-right h2'>{getHumanDate()}</div>
</Col>
</Row>
<br />
<Row>
<Col xs={12}>
<EventCalendar
month={_moment.month()}
year={_moment.year()}
events={events}
onEventClick={handleEventClick}
onEventMouseOver={handleEventMouseOver}
onEventMouseOut={handleEventMouseOut}
onDayClick={handleDayClick}
maxEventSlots={0}
/>
</Col>
</Row>

</div>
);
}

export default CalendarDemo

const styles = {
position: 'relative',
};

关于javascript - 将 react 类组件转换为功能组件的快速方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60223362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com