Я создаю приложение реагирования, которое я хочу разделить на три уровня, и у меня возникли небольшие проблемы, когда я обдумываю, как их следует структурировать и в какой иерархии лучше всего поддерживать методы React.
Три уровня: сервис (только вызовы API), бизнес-логика и пользовательский интерфейс. Моя цель здесь - обеспечить возможность многократного использования сервисного и бизнес-уровней и не привязывать их к конкретным компонентам пользовательского интерфейса.
Так что, на мой взгляд, структура моей программы должна быть UI> (является родителем) Business logic> (является родителем) уровня обслуживания. Однако мне трудно понять, как этот подход имеет смысл в реакции, поэтому мне интересно, правильная ли это идея. Моя проблема в том, что, как я понимаю, родители передают реквизит детям. Однако мне нужен сервисный уровень для передачи объектов в мою бизнес-логику, чтобы он мог выполнять свои функции и эффективно передавать его в пользовательский интерфейс для отображения.
Вот урезанная версия моего сервисного слоя:
interface State {
queues: any
}
@observer
class DeadletterService extends Component<Props, State> {
@observable deadletterQueue: [];
@observable queues: [];
constructor(props: any) {
super(props);
this.state = {
queues: []
};
this.queues = this.getQueues();
this.deadletterQueue = this.getByQueue("urlSlug");
}
// returns all queues as a JSON array
getQueues(): any {
let url = "url";
fetch(url)
.then(res => res.json())
.then(data => {
return data;
});
}
// given the name of a queue, returns the queue's deadletters as a JSON array
getByQueue(id: string): any {
let url = "url/{id}";
fetch(url)
.then(res => res.json())
.then(data => {
return data;
});
return
}
render() {
return (
<div>
<DeadletterLogic testQueues={this.queues} />
</div>
);
}
}
А вот урезанная версия моего логического слоя:
interface Props {
testQueues: any;
}
interface State {
queues: any
}
@observer
class DeadletterLogic extends Component<Props, State> {
constructor(props: any) {
super(props);
this.state = {
queues: []
};
this.getQueues();
}
// here is where the business logic will be done
getQueues() {
// in order to gets a list of queues here, a fetch call must be made in the service layer to the MessageQueueAPI
}
componentDidMount() {
// when passing from a parent, I'm not sure if this needs to live here or if it can live in getQueues to update when the fetch is finished.
this.setState({ queues: this.props.testQueues });
}
render() {
return (
<div>
{this.props.testQueues}
</div>
);
}
}
Каков наилучший способ получить значения, возвращаемые вызовом API в моем слое обслуживания, в бизнес-уровень в React? Поскольку это асинхронный вызов извлечения, мне также нужно обновить свой бизнес-уровень после того, как я действительно получу данные обратно.
Ура!