React Native - использовать переменную состояния в статической функции - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в React-Native, у меня проблема с созданием приложения.По сути, у меня есть основное приложение, которое делает что-то, одним из которых является установка переменной Date в состоянии с именем: sleepTime.Теперь я создал часы, которые работают отлично, и каждые секунды обновляются.Моя проблема сейчас заключается в создании функции в моем главном приложении, которая сравнивает фактическую дату (полученную с часов) с датой, сохраненной ранее.Проблема в том, что я использовал статическую функцию, которая вызывается на каждом тике в классе часов, эта функция (compareTime ()) находится в основном классе, и я получаю «undefined не объект», когда я ее вызываю,Что я не могу понять, так это как связать сделанный по часам звонок с датой, которую я сохранил до этого.

Это статическая функция:

static compareTime(){
  const sleepTime = this.state.sleepTime;
      if(new Date().toLocaleString() == sleepTime){
        this.stopTimer();
      }
 }

Класс часов:

class Clock extends React.Component {
          constructor(props) {
            super(props);
            this.state = {
              time: new Date().toLocaleString()
            };
          }
          componentDidMount() {
            this.intervalID = setInterval(
              () => this.tick(),
              1000
            );
          }
          componentWillUnmount() {
            clearInterval(this.intervalID);
          }
          tick() {
            this.setState({
              time: new Date().toLocaleString()
            });
            MainPage.compareTime();
          }

          render() {
            return (
              <Text style={styles.greeting}>
                The time is: {this.state.time}
              </Text>
            );
          }
        }

И возврат основного рендера, который является единственным, что связывает main и clock:

 return (
      <View style={styles.container}>
        <Clock />
        <Text style={styles.greeting}>
            Sleep time: {sleepTime}.
        </Text>
      </View>
 )

1 Ответ

0 голосов
/ 25 апреля 2018

Для этого вы можете использовать реквизит . Так как является подкомпонентом MainApplication, вы можете передать функцию comparetime () в as props, и эта функция может быть вызвана из

Основной рендер будет иметь,

<Clock compareTime={this.compareTime.bind(this)}/>

И класс Clock может использовать функцию из реквизита,

tick() {
  this.setState({
    time: new Date().toLocaleString()
  });
  this.props.compareTime();
}

Вы также можете передавать параметры, если хотите получить значения из класса Clock в Main.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...