Also lassen Sie uns sagen, dass ich ein einfaches Web-Layout erschaffe, wo ich eine Rückmeldung Komponente über dem MainContent
Komponente haben, wie so:React.js - Rendern von Komponenten mit unterschiedlichen Stile basierend auf Requisiten
class WebLayout extends Component {
render() {
<div>
<Header />
<FeedBackMessage
shouldRenderMessage={true}
typeMessage={"error"}
message={"Wrong input!"}
/>
<MainContent />
</div>
}
}
Und lasst uns angenommen, dass ich verschiedene Arten von Nachrichten habe, wie error
, warning
, success
.
Im Inneren des FeedBackMessage
, kann ich etwas als so haben:
class FeedBackMessage extends Component {
renderMessage(){
const {shouldRenderMessage, typeMessage, message } = this.props;
if (shouldRenderMessage === true){
<div>
{message}
</div>
}
}
render(){
return (
<div>
{this.renderMessage().bind(this)}
</div>
)
}
}
Ich bin ratlos, wie ich FeedBackMessage
Styling basierend auf typeMessage
prop Wert machen kann.
Zum Beispiel, wenn ich typeMessage
mit "Fehler" übergebe, möchte ich die FeedbackMessage
Komponente mit einem roten Rahmen Styling haben. Oder wenn ich confirm
passiere, würde ich gerne mit grünem Rand rendern.
Danke für den Input! Gibt es eine Möglichkeit, DRY-Praktiken zu verwenden? Zum Beispiel, was würde passieren, wenn ich mehr als 10 verschiedene Nachrichten habe? Mit Ihrer Methode würde es bedeuten, dass ich mehr als 10 verschiedene css classNames haben müsste. – Alejandro
In Bezug auf DRY wiederholen Sie sich nicht wirklich, wenn Sie ein anderes Verhalten basierend auf dem typeName benötigen. Wenn es 3 verschiedene mögliche Farben gibt, können Sie vielleicht die gleichen Klassennamen wiederverwenden und haben nur eine 1 zu viele Zuordnung zwischen Klassennamen und Typnamen. Sie können es wahrscheinlich kürzer machen, indem Sie 'this.props.typeName' als Klassennamen verwenden - aber Sie haben immer noch 10+ Klassen. Wenn Sie wirklich denken, dass dies immer noch zu viele Klassen sind, sollten Sie Inline-Stile ausprobieren, um Klassen ganz zu vermeiden. –