Я столкнулся с той же проблемой.
В большинстве сценариев использование hack-ish setTimeout(() => { }, 0)
в componentDidMount()
сработало.
Но не в частном случае; и я не хотел использовать ReachDOM findDOMNode
, поскольку в документации написано:
Примечание: findDOMNode - это управляющий штрих, используемый для доступа к базовому узлу DOM. В большинстве случаев использование этого выходного люка не рекомендуется, поскольку оно пробивает абстракцию компонента.
(Источник: https://facebook.github.io/react/docs/react -dom.html # finddomnode )
Итак, в этом конкретном компоненте мне пришлось использовать событие
componentDidUpdate()
, поэтому мой код оказался таким:componentDidMount() { // feel this a little hacky? check this: http://stackoverflow.com/questions/26556436/react-after-render-code setTimeout(() => { window.addEventListener("resize", this.updateDimensions.bind(this)); this.updateDimensions(); }, 0); }
И затем:
componentDidUpdate() { this.updateDimensions(); }
Наконец, в моем случае мне пришлось удалить прослушиватель, созданный в
componentDidMount
:componentWillUnmount() { window.removeEventListener("resize", this.updateDimensions.bind(this)); }
В Android вы не можете запускать сетевые действия в главном потоке - вам нужно запускать их в другом потоке, например:
Thread mThread = new Thread(new Runnable() {
@Override
public void run() {
try {
//Put your code that you want to run in here(check your connection for example)
} catch (Exception e) {
e.printStackTrace();
}
}
});
mThread.start