Во-первых, с использованием локального состояния в React нормально .Общее правило состоит в том, чтобы поднять состояние до уровня, при котором каждый компонент, который опирается на него, будет иметь к нему легкий доступ.Если данные в нем имеют значение только для этого конкретного компонента, то оставьте его локальным.
Теперь, как я могу здесь управлять состоянием, скажем, если пользователь изменяет адрес одного из студентов, как это сделать?это отражено в школе.
Исходя из вашего варианта использования, было бы наиболее эффективно хранить список учащихся и их свойства внутри компонента <School />
.Таким образом, вы можете передать его по мере необходимости, не беспокоясь.
Я заметил, что у вас есть состояние локально в каждом компоненте, полученном из его реквизита.Более эффективный способ - просто создать ссылки на реквизит и использовать их вместо этого.
Школьный компонент (оставить как есть)
Школа должна вести списокстудентов, а также все их подвойства.
Компоненты учащегося и адреса
Эти два объекта всегда должны ссылаться на свои реквизиты и вызывать родительский метод для обновления.состояние.
Вместо
this.state = {
studentName: this.props.student.name,
className: this.props.student.className,
address: this.props.student.address
}
просто сделайте
const { name, className, address } = this.props.student;
в любой функции, которая вам нужна для доступа к этим переменным.
Вы должны переместитьваш handleX
тип работает в School
и передает его через реквизит.
Вы также можете пропустить, используя слишком много реквизитов, и просто использовать Context API .Например ...
//In parent
const ThemeContext = React.createContext('default value');
...
return (
<SchoolContext.Provider value={this.state}>
...
</SchoolContext.Provider>
)
...
//In any child
import Context from './School';
class ChildComponent extends React.Component {
...
}
ChildComponent.contextType = Context;
Надеюсь, что это прояснилось, дайте мне знать, если есть что-то, что вы не поняли.