2016-05-30 2 views
1

Существует много сообщений об обновлении состояния реакции с участием массива, но ни один из них, похоже, не касается моего случая.Реагировать this.setState не обновлять переменную состояния массива

Я использую компонент FullCalendar.io, который принимает массив событий как опору из родительского компонента и заполняет ячейки календаря. Я попытался установитьState 'cal_events_state' на основе nextProps.cal_events, но по какой-то причине cal_event_state установлен в [] (видимо, исходное значение состояния перезаписывается).

Что мне не хватает?

import React from 'react'; 
import ReactDOM from 'react-dom'; 
var $ = require ('jquery') 

var Calendar = React.createClass ({ 
    render: function() { 
    return <div id="calendar"></div>; 
    }, 

    getInitialState: function() { 
     return { 
     cal_events_state: [{"due": "201505", "title": "Production"}] 
     , test_state: 11 
     } 
    }, 

componentDidMount: function() { 
var self = this; 
const var_cal_events = this.props.cal_events; //This prop is blank at this point because ajax hasn't returned an array yet. 
$('#calendar').fullCalendar({ 
     header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay' 
     }, 
     editable: true, 
     events: var_cal_events; 
    }) 
    }, 
    componentWillReceiveProps: function(nextProps) { 
    var self = this; 
    var var_cal_events = nextProps.cal_events; // after receiving the ajax fetch payload, this has some event tasks. 

    this.setState({ 
     cal_events_state: var_cal_events, // This doesn't update state with the newly received payload 
     test_state: 22   // This updates state 
}) 
$('#calendar').fullCalendar({ 
    events: var_cal_events 

}) 

$('#calendar').fullCalendar('refetchEvents'); 

}, 


}); 
+0

Почему вы создаете календарь дважды? И почему вы используете es5 и es6 в смешении? В верхней части этого, вы, вероятно, не должны использовать jquery здесь. Существуют и другие способы иметь календарь, и таким образом у вас нет тонны манипуляции с dom за пределами реакции (что является предпочтительной практикой) –

+0

У вас есть ссылка на лучшую пример календаря? –

+0

Я имею в виду просто сделать простой поиск в Google .. нашел результаты, подобные этому. [Link1] (https://github.com/Hacker0x01/react-datepicker) .... [Link2] (https://github.com/zippyui/react-date-picker) .... [Букет разных примеры] (https://react.rocks/tag/DatePicker) ... –

ответ

9

Оказалось, что «SetState» делает обновление переменной состояния, но я не понимал этого не делать, пока выполнение функции не будет завершена (то есть. До вашего кода выхода функционального блока Я проверял this.state.variable сразу после оператора setState, который сделал его похожим на то, что переменная не обновляется.

+0

это очень подчеркивало меня это! – leaksterrr

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