【发布时间】:2020-09-17 13:59:48
【问题描述】:
我正在尝试将下面的class component 转换为function component with hooks,但到目前为止我没有成功。
我在页面上看不到任何错误,也看不到页面上的终端,但我的目标是在页面上看到表单,但目前没有显示表单。
类组件
# PARENT
import React, { Component } from 'react';
import PersonalInfo from './PersonalInfo';
import AllInfo from './AllInfo';
class Main extends Component {
state = {
step: 1,
firstName: '',
lastName: '',
}
handleChange = input => e => {
this.setState({[input]: e.target.value});
}
showSteps = () => {
const {step, firstName, lastName } = this.state;
if(step === 1)
return (
<PersonalInfo
handleChange = {this.handleChange}
nextStep = {this.nextStep}
firstName = {firstName}
lastName = {lastName}
/>);
if(step === 3)
return (
<AllInfo
firstName = {firstName}
lastName = {lastName}
}
render() {
const {step} = this.state;
return(
<>
<h2>Step {step} of 3.</h2>
{this.showSteps()}
</>
);
}
}
export default Main;
# CHILD
import React, { Component } from 'react';
class PersonalInfo extends Component {
render() {
const { handleChange, firstName, lastName } = this.props;
return (
<div>
<h2>Enter your personal information</h2>
<label>
<input
type="text"
name="firstName"
placeholder="First name"
value = {firstName}
onChange={handleChange('firstName')}
/>
</label>
<label>
<input
type="text"
name="lastName"
placeholder="Last name"
value = {lastName}
onChange={handleChange('lastName')}
/>
</label>
</div>
);
}
}
export default PersonalInfo;
功能组件
# PARENT
import React, { useState } from "react";
import PersonalInfo from './PersonalInfo';
type Props = {
state: Object,
};
const MultiSteps = (props: Props) => {
const [state, setState] = useState({
step: 1,
firstName: '',
});
const handleChange = (e) => {
e.preventDefault();
setState({...state, [input]: e.target.value});
}
const showSteps = () => {
if (state && state.step === 1)
return (
<PersonalInfo
handleChange = {handleChange}
firstName = {state.firstName}
/>);
if (state && state.step === 2)
return (
<AllInfo
firstName = {state.firstName}
/>);
}
return(
<>
<h2>Step {state.step} of 3.</h2>
Hello - {showSteps()}
</>
);
}
export default MultiSteps;
# CHILD
import React from "react";
const PersonalInfo = (props) => {
return (
<div>
<h2>Enter personal information</h2>
<label>
<input
type="text"
name="firstName"
placeholder="First name"
value={props.firstName}
onChange={handleChange('firstName')}
/>
</label>
</div>
);
}
export default PersonalInfo;
目前页面和终端都没有错误,但我无法在页面上看到任何表单。
下方出现新错误
ReferenceError: handleChange is not defined
12 | placeholder: "First name" // value={firstName}
13 | ,
14 | value: "Lorenzo",
> 15 | onChange: handleChange('firstName')
16 | })));
17 | };
18 |
任何帮助都会非常有帮助!
【问题讨论】:
-
这里的实际问题是什么?你有例外吗?
-
你有
[e.input]这可能是什么原因? -
@mleister 我在页面上根本看不到表格。
-
@BhojendraRauniyar 我最近将该行编辑为
[e.input],然后我再次将其删除。所以[input]不是解决方案。我仍然看不到页面上的任何表单。 -
@mleister 我已经用当前的错误信息更新了帖子
标签: javascript reactjs react-native ecmascript-6 react-redux