Я дурачусь, изучая React, и я хотел бы знать, что было бы элегантным решением для сценария, представленного ниже.
Следуйте по этой ссылке , чтобы увидеть полный набор кодов.
У меня есть child
компонент, который имеет <h1>
tag
. Этот тег возвращает сообщение, которое я отображаю динамически, как будет показано ниже.
Приложение root контейнер
У меня есть state
для этого container
и я хочу оставить его здесь.
Состояние:
Объектом обсуждения здесь является cockpitAlert
object
.
state = {
state = {
persons: [
{ id: "a", name: "foo1" },
{ id: "b", name: "foo2" },
{ id: "c", name: "foo3" }
],
CockpitAlert: {
regular: "Some message",
alert1: "The array is ending",
alert2: "There is nothing to show"
}
};
Ниже показано, как я удаляю визуализированные элементы - все еще в приложении. js
personDeleteHandler = index => {
const person = [...this.state.persons];
person.splice(index, 1);
this.setState({ persons: person });
};
Ниже показано, где я отображаю свои JSX
render() {
return (
<div className="App">
<Cockpit
regular={this.state.CockpitAlert.regular}
alert1={this.state.CockpitAlert.alert1}
alert2={this.state.CockpitAlert.alert2}
personsLength={this.state.persons.length}
/>
<Person click={this.personDeleteHandler} persons={this.state.persons} />
</div>
);
}
Детская кабина
Ниже находится лог c. let message
динамически изменяет props
в соответствии с длиной persons
array
, которая сокращается при щелчках.
import React from "react";
function Cockpit(props) {
let message = props.regular;
if (props.personsLength <= 2) {
message = props.alert1;
}
if (props.personsLength === 0) {
message = props.alert2;
}
return (
<div>
<h1>{message}</h1>
</div>
);
}
export default Cockpit;
Как видите, это выглядит не очень красиво.
Я не хочу, чтобы все эти разные props
указывались на моей логике c:
regular={this.state.CockpitAlert.regular}
alert1={this.state.CockpitAlert.alert1}
alert2={this.state.CockpitAlert.alert2}
personsLength={this.state.persons.length}
Интересно, есть ли способ, которым я мог бы пройти просто один props
, например props.message
и изменить его динамически, возможно, через setState()
на уровне root
, где установлен state
без необходимости перемещать мои логики c с Cockpit
на App.js