Вопрос, в частности, связан с передачей 'this', чтобы установить состояние в компонентах без рендеринга React
Я устанавливаю начальное состояние из данных, полученных из вызова XHR.Это хорошо работает в основном приложении, как это:
export default class App extends Component {
constructor() {
super();
this.state = { someKey: [] };
}
XhrLoader() {
const req = new XMLHttpRequest();
...
this.setState({someKey: [data]});
}
componentDidMount() {
this.XhrLoader();
}
}
При экспорте функции XhrLoader вы можете передать «this» в модуль как:
import XhrLoader from 'Xhrloader';
export default class App extends Component {
constructor() {
super();
this.state = { someKey: [] };
}
componentDidMount() {
this.XhrLoader(this);
}
}
// imported module
XhrLoader(app) {
const req = new XMLHttpRequest();
...
app.setState({someKey: [data]});
}
В качестве альтернативы вы также можете передать связанный компонент:
export default class App extends Component {
constructor() {
super();
this.state = { prodList: [] };
this.SetState = this.SetState.bind(this);
}
componentDidMount() {
XhrLoader(this.SetState);
}
SetState(newState) {
this.setState(newState);
}
}
// in XrhLoader
export default function XhrLoader(setAppState) {
...
setAppState({someKey: newData)}
}
компонент ничего не рендерит, обычно просто передает данные и методы через реквизиты:
< XhrLoader setter={someBoundMethod} />
Но этот способ выполняет ненужные рендеры, если рендеринг возвращает null
Существует ли правильный стиль React для достижения состояния установки из импортированных компонентов без рендеринга?