2015-06-04 16 views
14
React.render(<MyComponent/>, mainNode, function() { 
    console.log('2'); 
}); 
console.log('1'); 

drukujeKiedy wywoływany jest wywołanie zwrotne React.render()?

2 
1 

Również scrollTop() w wywołania zwrotnego nie działa. Działa, jeśli wywołuję go po render() zwraca.

Czy funkcja React.render() jest synchroniczna?

Czy DOM jest renderowany, gdy funkcja zwraca?

Kiedy wywoływany jest wywołanie zwrotne? Co chciałbym zrobić w oddzwanianiu?

+2

jeśli potrzebujesz wywołania zwrotnego do wykonania po zbudowaniu komponentu reagującego, powinieneś umieścić funkcję zwrotną w funkcji componentDidMount komponentu reagowania. –

+1

Chcę, aby wywołanie zwrotne po reakcji zaktualizowało DOM. Próbuję zrobić window.scrollTop(), ale w szczególności staram się lepiej zrozumieć cykl życia reagowania. Czy DOM jest dostępny na window.document po wywołaniu metody componentDidMount? Ponadto, czy element componentDidMount jest wywoływany w celu wywoływania późniejszych wywołań React.render()? – akula1001

+1

DOM dostępny po wywołaniu metody componentDidMount, ponieważ na tym etapie można użyć React.findDOMNode (this.refs.node). React.render nie jest synchroniczny. W twoim przykładzie React.render nie ma żadnych żądań do servera, ponieważ biblioteka React jest już w przeglądarce, więc asynchronizacja się nie dzieje. –

Odpowiedz

13

Można przenieść logikę zwrotną do komponentu, który jest montowany, a następnie użyć metody componentDidMount po raz pierwszy komponent jest renderowany do DOM i componentDidUpdate dla kolejnych aktualizacji/renderów do DOM. Komponent będzie dostępny w rzeczywistym DOM przez window.document lub przy użyciu metody getDOMNode komponentów w obu tych metodach.

To nie jest takie samo, jak wywołanie zwrotne renderowania jako takie. Warto zauważyć, że jeśli zmieniasz stan komponentu, możesz także przekazać funkcję zwrotną do metody setState dla komponentu, który zostanie zastosowany po zaktualizowaniu stanu komponentów (i wszelkich zmian renderowanych do DOM).

Po sprawdzeniu kodu źródłowego React w celu potwierdzenia - podczas renderowania nowego węzła głównego (zgodnie z fragmentem kodu) do DOM proces jest synchroniczny, a wywołanie zwrotne (jeśli jest przekazywane) uruchamia się natychmiast po (https://github.com/facebook/react/blob/master/src/renderers/dom/client/ReactMount.js liniach 570-582)

Powiązane problemy