I have a user model that looks like this:
{
"name": "Sun12",
"role": "1",
"email": "[email protected]",
"password": "test123",
"about": "This is a description of me.",
"skills": ["Acting", "Music", "Art", "English Literature"],
"studying": "Mind Control"
}
I want to create a form that will capture the above users information.
The skills field in the user schema is arbitrarily long - I want users to be able to add as many skills as they like.
How can I dynamically render text input fields, and send each of the inputs to those dynamically rendered fields to the skills array?
Here is my entire Signup.js file:
// users Signin
import React, {useState} from 'react';
import Layout from '../core/Layout';
import {API} from '../config';
const Signup = () => {
const [values, setValues] = useState({
name: '',
email: '',
password: '',
studying: '',
skills: [],
error: '',
success: ''
});
const {name, email, password, studying} = values;
const signup = (user) => {
fetch(`${API}/signup`, {
method: "POST",
headers: {
Accept: 'application/json',
"Content-Type": "application/json"
},
body: JSON.stringify(user)
})
.then(response => {
return response.json();
})
.catch(err => {
console.log(err);
});
};
const clickSubmit = event => {
event.preventDefault();
signup({name, email, password, studying});
};
const handleChange = name => event => {
setValues({...values, error: false, [name]: event.target.value});
};
const signUpForm = () => (
<form>
<div className="form-group">
<label className="text-muted">Name</label>
<input onChange={handleChange('name')} type="text" className ="form-control" />
</div>
<div className="form-group">
<label className="text-muted">Email</label>
<input onChange={handleChange('email')} type="email" className ="form-control" />
</div>
<div className="form-group">
<label className="text-muted">Password</label>
<input onChange={handleChange('password')} type="password" className="form-control" />
</div>
<div className="form-group">
<label className="text-muted">Studying</label>
<input onChange={handleChange('studying')} type="text" className ="form-control" />
</div>
<div>
<div>{createInputs()}</div>
<button onClick={addSkill}>Add</button>
</div>
<button onClick={clickSubmit} className="btn btn-primary">
Sign Up
</button>
</form>
);
return(
<Layout
title="Signup"
description="Join today."
className="container col-md-8 offset-md-2">
{signUpForm()}
{JSON.stringify(values)}
</Layout>
);
};
export default Signup;