2017-01-10 3 views
-1

У меня возникла проблема с моим компонентом реакции, который отображает форму. В принципе, когда я ввожу страницу обратного отсчета, форма просто не работает (я имею в виду, что она вообще не действует, я пишу, например, 123, которая составляет 2 мин и 3 секунды, и ничего не происходит, просто ничего). Но, например, если я перейду на главную страницу и вернусь на страницу обратного отсчета, это сработает. Я заметил, что при входе на эту страницу в первый раз компонент componentWillMount работает, но у компонентаDidMount нет (это не будет console.log сообщение). Ссылка на Heroku: http://fathomless-lowlands-79063.herokuapp.com/?#/countdown?_k=mj1on6Реакция Компонент Не смонтирован

CountdownForm.jsx

var React = require('react'); 
var CountdownForm = React.createClass({ 
    onSubmit: function (e) { 
    e.preventDefault(); 
    var strSeconds = this.refs.seconds.value; 
    if (strSeconds.match(/^[0-9]*$/)){ 
     this.refs.seconds.value = ''; 
     this.props.onSetCountdown(parseInt(strSeconds, 10)); 
    } 

    }, 
    render: function() { 
    return(
     <div> 
     <form ref="form" onSubmit={this.onSubmit} className="countdown-form"> 
     <input type="text" placeholder="Enter time in seconds" ref="seconds" /> 
     <button className="button expanded">Start 
     </button> 
     </form> 
    </div> 
    ); 
    } 
    }); 
    module.exports = CountdownForm; 

Countdown.jsx

var React = require('react'); 
var Clock = require('Clock'); 
var CountdownForm = require('CountdownForm'); 
var Controls = require('Controls'); 

var Countdown = React.createClass({ 
    getInitialState: function() { 
    return { 
     count: 0, 
     countdownStatus: 'stopped' 
    }; 
    }, 
    componentDidUpdate: function (prevProps, prevState) { 
    if (this.state.countdownStatus !== prevState.countdownStatus) 
    { 
     switch (this.state.countdownStatus){ 
      case 'started': 
      this.startTimer(); 
      break; 
      case 'stopped': 
       this.setState({count: 0}) 
      case 'paused': 
       clearInterval(this.timer) 
       this.timer = undefined; 
      break; 
     } 
    } 
    }, 
    componentDidMount: function() { 
    console.log("componentDidMount"); 
    }, 
    componentWillMount: function() { 
    console.log("componentWillMount"); 
    }, 
    componentWillUnmount: function() { 
    console.log('componentDidUnmount'); 
    }, 
    startTimer: function() { 
     this.timer = setInterval(() => { 
     var newCount = this.state.count - 1; 
     this.setState({ 
      count: newCount >= 0 ? newCount : 0 
     }); 
     }, 1000); 
    }, 
    handleSetCountdown: function (seconds){ 
    this.setState({ 
     count: seconds, 
     countdownStatus: 'started' 
    }); 
    }, 
    handleStatusChange: function (newStatus) { 
    this.setState({ 
     countdownStatus: newStatus 
    }); 
    }, 
    render: function() { 
    var {count, countdownStatus} = this.state; 
    var renderControlArea =() => { 
     if (countdownStatus !== 'stopped') { 
     return <Controls countdownStatus={countdownStatus} onStatusChange={this.handleStatusChange} /> 
     } else { 
     return <CountdownForm onSetCountdown={this.handleSetCountdown} /> 
     } 

    }; 
    return(
    <div> 
     <Clock totalSeconds={count} /> 
     {renderControlArea()} 
    </div> 
); 
} 
}); 
module.exports = Countdown; 
+0

Куда фрагмент кода не работает? Я не вижу, что компонентWillMount или componentDidMount – Luke101

+0

Говорить что-то «не работает» без предоставления каких-либо ошибок нецелесообразно. – lux

+0

Прошу прощения, я не понял, что не ввел изменения в github, только для героку. Не работает я имею в виду, что я получил форму и после нажатия кнопки «Пуск» или нажав кнопку «Ввод», она должна отправить форму и функцию onSubmit, которая должна быть вызвана, но это не так. – batinex

ответ

0

Я решил эту проблему. Основной проблемой была ошибка: «Неиспользуемая ошибка: компоненты функции без состояния не могут иметь ссылки. при инварианте». Проблема заключалась в компонентах без состояния, поэтому я вместо использования функций стрелок в Main.jsx и Nav.jsx использовал React.createClass ({}).

Смежные вопросы