Ich habe eine App, die Bestätigungsmodalität beim Löschen zeigt.
Hier ist der vollständige Code:
https://codesandbox.io/s/vkz5xm8r0
In Komponenten/Modal.js habe ich einige bedingte Render. Was ist, wenn ich das gesamte Modal basierend auf diesen Bedingungen stylen möchte? Was ist der beste Weg?
Eg. Wie man das ganze modale so stylt, so ändert es Aussehen wie folgt:
https://imgur.com/a/pK5ZuDer beste Weg zum bedingten Rendern Reagiere Komponenten und halte sie DRY
0
A
Antwort
0
Reorganisierte den Code ein bisschen. Ich glaube, das macht den Code sauberer und einfacher zu stylen. Und hoffentlich beantwortet Ihre Frage :)
// 'components/Modal.js'
import React from 'react';
import ReactLoading from 'react-loading';
class Modal extends React.Component {
constructor(props) {
super(props);
this.state = {
status: 'prompting' //'prompting', 'deleting', 'deleted'
};
}
removeUser =() => {
this.setState({ status: 'deleting' });
// simulate async loading action
setTimeout(
() =>
this.setState({
status: 'deleted'
}),
2000,
);
//simulate promise (function above then this below)
setTimeout(() => this.props.removeUser(this.props.data), 2001);
};
closeModal =() => {
this.props.closeModal();
this.setState({ status: 'prompting' });
};
render() {
const { id, name } = this.props.data;
const {status} = this.state;
// The gray background
const backdropStyle = {
position: 'fixed',
top: 0,
bottom: 0,
left: 0,
right: 0,
backgroundColor: 'rgba(0,0,0,0.3)',
padding: 50,
};
// The modal "window"
const modalStyle = {
backgroundColor: '#fff',
borderRadius: 3,
maxWidth: 400,
minHeight: 200,
margin: '0 auto',
padding: 30,
};
const modal = {
"prompting": (<div className="prompting">
<h5>You want to delete user {id} : {name}</h5>
<button onClick={this.removeUser}>Delete</button>
<button onClick={this.closeModal}>Cancel</button>
</div>
),
"deleting": (<div className="deleting">
<h5> Deleting </h5>
<div>
<ReactLoading type="spin" color="#444" />
</div>
</div>),
"deleted": (<div className="deleted">
<h5> Deleted </h5>
<button onClick={this.closeModal}>OK</button>
</div>)
};
if(this.props.displayModal){
return (
<div className="backdrop" style={backdropStyle}>
<div className="modal" style={modalStyle}>
{modal[status]}
</div>
</div>
);
}
else
return null;
}
}
export default Modal;
Verwandte Themen
- 1. Reagiere JS halte Sitzung mit Schließung
- 2. Der beste Weg zum Redirect
- 3. Reagiere gestylte Komponenten: siehe andere Komponenten
- 4. Wie reagiere ich die Bootstrap-Komponenten?
- 5. Der beste Weg, asynchrone Aktionen von Container-Komponenten zu behandeln
- 6. Der beste Weg zum Sprite Images?
- 7. Der beste Weg zum Vergleich LocalDates
- 8. Der beste Weg zum "clear: both"
- 9. Der beste Weg zum Verwischen jQuery
- 10. Der beste Weg zum Alias Ausdruck
- 11. Der beste Weg zum alphanumerischen Einchecken Javascript
- 12. Der beste Weg zum Umfang jquery plugins
- 13. Der beste Weg zum Komponententest Sammlung?
- 14. Der beste Weg zum Layout-Anwendung?
- 15. PouchDB & ANGULARJS - der beste Weg zum Design
- 16. Schienen der beste Weg zum Geltungsbereich vars
- 17. Meteor und Reagieren: Korrekter Weg zum Rendern nach Login-Status
- 18. Der beste Weg zum Zwischenspeichern von JSON
- 19. Der beste Weg zum Aufräumen URL-Hashtag
- 20. Der beste Weg, Rendering-Komponenten in Render-Methode zu behandeln
- 21. Reagiere den Router nicht mit Komponenten?
- 22. Überschreiben "finden" in ActiveRecord die DRY Weg
- 23. Get Strings von DataRow der DRY Weg
- 24. was der beste Weg
- 25. Der beste Weg, Strings
- 26. Rendern mehrerer Komponenten
- 27. der beste Weg zum Auslösen und Verwalten von Ausnahmejava - Frühling?
- 28. Korrekter Weg zum bedingten Ausblenden eines Inhaltsblocks auf bestimmten Seiten
- 29. Reagiere den Übergang zwischen den Komponenten
- 30. Der beste Weg