Reputation: 55
I am new in react. I want to use form stepper in my project. I found one library but in that library using class components. I am little confuse convert class components to functional components. I have short knowledge of react.
import {connect} from 'react-redux'
import { Link } from 'react-router-dom'
import PropTypes from 'prop-types'
import Stepper from 'react-stepper-horizontal'
import { Card } from 'reactstrap'
import GeneralForm from './../../components/con/GeneralForm'
import PersonalDetailsForm from './../../components/con/PersonalDetailsForm'
import NomineeDetailsForm from './../../components/con/NomineeDetailsForm'
const ConCreate = (props) => {
constructor(props) {
super(props);
this.nextPage = this.nextPage.bind(this);
this.previousPage = this.previousPage.bind(this);
this.state = {
page: 0,
steps: [
{title: 'Visitor Details'},
{title: 'Personal Details'},
{title: 'Nominee Details'}
]
};
}
nextPage() {
this.setState({ page: this.state.page + 1 });
}
previousPage() {
this.setState({ page: this.state.page - 1 });
}
return (
<Card>
<Stepper steps={ steps } activeStep={ page } />
{page === 0 && <GeneralForm onSubmit={nextPage} />}
{page === 1 && (
<PersonalDetailsForm
previousPage={previousPage}
onSubmit={nextPage}
/>
)}
{page === 2 && (
<NomineeDetailsForm
previousPage={previousPage}
onSubmit={onSubmit}
/>
)}
</Card>
)
}
ConCreate.propTypes = {
}
const mapDispatchToProps = {}
function mapStateToProps (state) {
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(ConCreate)
How can I convert below code in functional components
constructor(props) {
super(props);
this.nextPage = this.nextPage.bind(this);
this.previousPage = this.previousPage.bind(this);
this.state = {
page: 0,
steps: [
{title: 'Visitor Details'},
{title: 'Personal Details'},
{title: 'Nominee Details'}
]
};
}
nextPage() {
this.setState({ page: this.state.page + 1 });
}
previousPage() {
this.setState({ page: this.state.page - 1 });
}
Please suggest me how to convert class components to functional components.
Upvotes: 3
Views: 4108
Reputation: 238
Check the code below:
import React, {useState} from 'react'
import {connect} from 'react-redux'
import { Link } from 'react-router-dom'
import PropTypes from 'prop-types'
import Stepper from 'react-stepper-horizontal'
import { Card } from 'reactstrap'
import GeneralForm from './../../components/con/GeneralForm'
import PersonalDetailsForm from './../../components/con/PersonalDetailsForm'
import NomineeDetailsForm from './../../components/con/NomineeDetailsForm'
const ConCreate = (props) => {
const initStepsValue = [
{title: 'Visitor Details'},
{title: 'Personal Details'},
{title: 'Nominee Details'}
]
const [page, setPage] = useState(0)
const [steps, setSteps] = useState(initStepValue)
const nextPage = () => setPage(page + 1)
const prevPage = () => previousPage(page - 1)
return (
<Card>
<Stepper steps={ steps } activeStep={ page } />
{page === 0 && <GeneralForm onSubmit={nextPage} />}
{page === 1 && (
<PersonalDetailsForm
previousPage={previousPage}
onSubmit={nextPage}
/>
)}
{page === 2 && (
<NomineeDetailsForm
previousPage={previousPage}
onSubmit={onSubmit}
/>
)}
</Card>
)
}
ConCreate.propTypes = {}
const mapDispatchToProps = {}
const mapStateToProps = state => ({})
export default connect(
mapStateToProps,
mapDispatchToProps
)(ConCreate)
Upvotes: 4
Reputation: 1280
Replace your constructor and functions with this code, basically you don't need a constructor and 'this'.
const [page, setPage] = React.useState(0);
const [steps, setSteps] = React.useState([
{title: 'Visitor Details'},
{title: 'Personal Details'},
{title: 'Nominee Details'}
])
function nextPage() {
setPage(page + 1)
}
function previousPage() {
setPage(page - 1)
}
Upvotes: 1
Reputation: 727
Functional components do not use state like a class. You can use the useState method with a functional component though. But to answer your question.
class MyClassComponent extends Component {
render() {
return(
// code
)
}
}
export default MyClassComponent;
Here is a functional component
function MyFunctionalComponent() {
return(
//code
)
}
export default MyFunctionalComponent;
Upvotes: 1