Я новичок в ReactJ, на самом деле я работаю над формой мастера, где пользователь помещает некоторые данные на шаге 1, а на шаге 1 мы можем создать пользователя в БД, а на шаге 2 мы можем загрузить фотографию пользователя на сервер, но когда я нажимаюна следующем, то это сообщение появляется.{error: 400, reason: "Need to set a username or email", message: "Need to set a username or email [400]", errorType: "Meteor.Error"}
.Не могли бы вы помочь мне, какую ошибку я допустил в своем коде.
Мы храним наши данные через API.
Код формы Wizar
import React from 'react';
import 'antd/dist/antd.css';
import './WizarStyle.css';
import styled from 'styled-components';
import { Steps, Form, Button, Card } from 'antd';
import RegisterStepOne from '../RegisterStepOne/RegisterStepOne';
import RegisterStepTwo from '../RegisterStepTwo/RegisterStepTwo';
import RegisterStepThree from '../RegisterStepThree/RegisterStepThree';
import RegisterStepFour from '../RegisterStepFour/RegisterStepFour';
const Step = Steps.Step;
const GeneralText = styled.div`
color: red;
font-size: 26px;
font-weight: 600;
text-align: center;
padding-bottom: 30px;
font-family: Lato;
margin-top: 50px;
color: #012653;
`;
const ButtonWrapper = styled.div`
text-align: center;
margin-top: 26px;
`;
class Wizard extends React.Component {
constructor(props) {
super(props);
this.state = {
current: 0,
// user: null,
};
}
steps = [
{
title: 'General Information',
content: (
<RegisterStepOne
getFieldDecorator={this.props.form.getFieldDecorator}
/>
),
},
{
title: 'Upload Photo',
content: (
<RegisterStepTwo
getFieldDecorator={this.props.form.getFieldDecorator}
/>
),
},
{
title: 'Upload Resume',
content: (
<RegisterStepThree
getFieldDecorator={this.props.form.getFieldDecorator}
/>
),
},
{
title: 'Add Skills',
content: (
<RegisterStepFour
getFieldDecorator={this.props.form.getFieldDecorator}
/>
),
},
];
next() {
this.setState(prevState => ({ current: prevState.current + 1 }));
}
handleSubmit = e => {
e.preventDefault();
this.props.form.validateFieldsAndScroll((err, values) => {
if (!err) {
// this.setState({ user: [this.state.user, values] });
const userOject = {
profile: {
type: 'employee',
screen: 'Step0',
},
...values,
};
fetch('http://138.197.207.41:9000/api/auth/createuser', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
user: userOject,
}),
})
.then(response => response.json())
.then(user => {
if (user.error) {
console.warn(user);
} else if (user && user.user) {
console.warn(user);
localStorage.setItem('user', JSON.stringify(user.user));
const modifier = {
id: user.user._id,
type: user.user.profile.type,
profile: {
fullName: values.fullName,
position: values.lastPosition,
username: values.username,
location: values.lastPosition,
company: values.lastCompany,
photo: '',
screen: 'Step1',
},
};
fetch(`http://138.197.207.41:9000/api/auth/user/update`, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
id: user.user._id,
modifier,
}),
})
.then(response => response.json())
.then(res => {
if (res.error) {
console.warn(res);
} else {
console.warn(res);
this.next();
}
})
.done();
}
});
}
});
};
prev() {
this.setState(prevState => ({ current: prevState.current - 1 }));
}
getStep = props => this.steps[this.state.current].content;
render() {
const { current } = this.state;
const { getFieldDecorator } = this.props.form;
return (
<Card style={{ borderRadius: 10 }}>
<Form onSubmit={this.handleSubmit}>
<GeneralText>{this.steps[current].title}</GeneralText>
<Steps current={current}>
{this.steps.map((item, index) => (
<Step key={index.toString()} small="small" />
))}
</Steps>
<div className="steps-content">{this.getStep(getFieldDecorator)}</div>
<div className="steps-action">
{' '}
<ButtonWrapper>
{current < this.steps.length - 1 && (
<Button
type="primary"
htmlType="submit"
style={{
background: '#ff9700',
fontWeight: 'bold',
border: 'none',
}}
>
Next
</Button>
)}
{current === this.steps.length - 1 && (
<Button
type="primary"
htmlType="submit"
style={{
background: '#ff9700',
fontWeight: 'bold',
border: 'none',
}}
>
Done
</Button>
)}
{current > 0 && (
<Button
className="preButton"
style={{ marginLeft: 8, border: '1px solid #ff9700' }}
onClick={() => this.prev()}
>
Previous
</Button>
)}
</ButtonWrapper>
</div>
</Form>
</Card>
);
}
}
export default Form.create()(Wizard);