Ho cercato di sviluppare una forma di dashboard simile al modulo di elenco di airbnb per comprendere più profondamente la reazione al redux, ma sono bloccato nel bel mezzo del mio progetto. Ho un modulo multiplo in cui quando l'utente fa clic sul pulsante Continua l'utente otterrà un altro modulo da compilare e così via e se l'utente fa clic sul pulsante Indietro l'utente otterrà la forma di un passo indietro con valori precedentemente riempiti. Non potrei decidere cosa dovrei fare per questo. Devo creare un oggetto in azione come listingName. riepilogo, nome, email ecc. come valore vuoto e aggiornarlo con riduttore usando Object.assign() o cosa. Fino ad ora ho potuto svilupparmi come quando un utente fa clic sulla scheda personale viene mostrato un modulo relativo alle informazioni personali e quando l'utente fa clic sulla scheda di base, viene mostrato un modulo relativo alle informazioni di base. Voglio che tutti i dati del modulo vengano inviati al server al momento dell'invio. Cosa dovrei fare ora ? Uso l'azione di incremento e decremento per il pulsante continua e indietro e utilizzo l'azione di invio sull'ultimo pulsante del modulo? Potresti darmi un'idea per favore?Modulo di registrazione multiplo con redux e risposta
Ecco il mio codice
azioni/index.js
export function selectForm(form){
return{
type: 'FORM_SELECTED',
payload: form
};
}
riduttori/reducer_active_form.js
export default function(state=null, action){
let newState = Object.assign({},state);
switch(action.type){
case 'FORM_SELECTED':
return action.payload;
}
return state;
}
riduttori/reducer_form_option.js
export default function(){
return[
{ option: 'Personal Information', id:1},
{ option: 'Basic Information', id:2 },
{ option: 'Description', id:3},
{ option: 'Location', id:4},
{ option: 'Amenities', id:5},
{ option: 'Gallery', id:6}
]
}
contenitori/form-dettagli
class FormDetail extends Component{
renderPersonalInfo(){
return(
<div className="personalInfo">
<div className="col-md-4">
<label htmlFor='name'>Owner Name</label>
<input ref="name" type="textbox" className="form-control" id="name" placeholder="Owner name" />
</div>
<div className="col-md-4">
<label htmlFor="email">Email</label>
<input ref="email" type="email" className="form-control" id="email" placeholder="email" />
</div>
<div className="col-md-4">
<label htmlFor="phoneNumber">Phone Number</label>
<input ref="phone" type="textbox" className="form-control" id="phoneNumber" placeholder="phone number" />
</div>
<div className="buttons">
<button className="btn btn-primary">Continue</button>
</div>
</div>
);
}
renderBasicInfo(){
return(
<div>
<h3>Help Rent seekers find the right fit</h3>
<p className="subtitle">People searching on Rental Space can filter by listing basics to find a space that matches their needs.</p>
<hr/>
<div className="col-md-4 basicForm">
<label htmlFor="price">Property Type</label>
<select className="form-control" name="Property Type" ref="property">
<option value="appartment">Appartment</option>
<option value="house">House</option>
</select>
</div>
<div className="col-md-4 basicForm">
<label htmlFor="price">Price</label>
<input type="textbox" ref="price" className="form-control" id="price" placeholder="Enter Price" required />
</div>
<div className="buttons">
<button className="btn btn-primary">Back</button>
<button className="btn btn-primary">Continue</button>
</div>
</div>
);
}
renderDescription(){
return(
<div>
<h3>Tell Rent Seekers about your space</h3>
<hr/>
<div className="col-md-6">
<label htmlFor="listingName">Listing Name</label>
<input ref="name" type="textbox" className="form-control" id="listingName" placeholder="Be clear" />
</div>
<div className="col-sm-6">
<label htmlFor="summary">Summary</label>
<textarea ref="summary" className="form-control" id="summary" rows="3"></textarea>
</div>
<div className="buttons">
<button className="btn btn-primary">Back</button>
<button className="btn btn-primary">Continue</button>
</div>
</div>
);
}
renderLocation(){
return(
<div>
<h3>Help guests find your place</h3>
<p className="subtitle">will use this information to find a place that’s in the right spot.</p>
<hr/>
<div className="col-md-6">
<label htmlFor="city">City</label>
<input ref="city" type="textbox" className="form-control" id="city" placeholder="Biratnagar" />
</div>
<div className="col-md-6">
<label htmlFor="placeName">Name of Place</label>
<input ref="place" type="textbox" className="form-control" id="placeName" placeholder="Ganesh Chowk" />
</div>
<div className="buttons">
<button className="btn btn-primary">Back</button>
<button className="btn btn-primary">Continue</button>
</div>
</div>
);
}
render(){
if (!this.props.form){
return this.renderPersonalInfo();
}
const type = this.props.form.option;
console.log('type is', type);
if (type === 'Personal Information'){
return this.renderPersonalInfo();
}
if (type === 'Basic Information'){
return this.renderBasicInfo();
}
if (type === 'Description'){
return this.renderDescription();
}
if (type === 'Location'){
return this.renderLocation();
}
}
}
function mapStateToProps(state){
return{
form: state.activeForm
};
}
export default connect(mapStateToProps)(FormDetail);
che volevo fare da solo così posso capire il flusso di redux bene e capire cosa dovrebbe essere fatto in tale situazioni, come l'azione, i riduttori devono essere progettati. Comunque grazie per il suggerimento. – pri
puoi fare il semplice tutorial per ottenere le basi. Quindi vuoi solo sviluppare il più velocemente possibile. Le cose non rimangono come sono a lungo. Specialmente lo sviluppo front-end è incredibilmente veloce. – Theo
Quando apprendi una nuova tecnologia, c'è un enorme valore nel fare le cose da zero. Stai cercando guai se usi una serie di strumenti che non capisci, perché nel secondo caso il tuo caso d'uso diventa più complicato (o lo strumento non funziona come ti aspetti), non hai idea di cosa fare. –