【问题标题】:TypeError: d[("get" + method)] is not a function in reactjs while reading data from firebaseTypeError: d[("get" + method)] is not a function in reactjs while reading data from firebase
【发布时间】:2020-04-29 19:45:44
【问题描述】:

当我点击星期按钮时,它给了我错误:

TypeError: d[("get" + method)] 不是函数 (匿名函数) node_modules/日期算术/index.js:281 278 | })(方法); 279 | 280 |返回函数(d, val){

281 |如果(val === 未定义) | ^ 282 |返回 d'get' + 方法 283 | 284 | var dateOut = new Date(d)

通常,它必须根据数据的开始和结束时间来显示数据。

getReservations = () => this.db.ref('reservations');

import { Calendar, momentLocalizer } from 'react-big-calendar';

const localizer = momentLocalizer(moment);
const DragAndDropCalendar = withDragAndDrop(Calendar);

class CalFormBase extends Component {
    constructor(props) {
        super(props);
        this.state = {
            calendarInitialState,
            events: [
                {
                    allDay: true,
                    start: Date(),
                    end: Date(),
                }
            ]
        };
    }

componentDidMount() {
            this.props.firebase.getReservations().on('value', snapshot => {
            this.setState({
                events: snapshot.val(),
            });
        });
    }


render() {
        if (this.state.events) {
            return (
                <div className={'row'}>
                    <MuiThemeProvider>
                        <div className={'col-2'}>
                            Equipments:
                            <FloatingActionButton
                                mini={true}
                                className={'m-2'}
                                onClick={() => this.handleEquipments()}
                            >
                                <ContentAdd />
                            </FloatingActionButton>
                            <Sidebar
                                events={this.state.equipments}
                                onClickEvent={this.handleEquipments}
                            />
                        </div>
                        <div style={{ height: 500 }} className={'col-8'}>
                            <DragAndDropCalendar
                                events={this.state.events}
                                onEventDrop={this.moveEvent}
                                resizable
                                localizer={localizer}
                                onEventResize={this.resizeEvent}
                                defaultView="month"
                                defaultDate={new Date()}
                                onSelectEvent={this.selectEvent}
                                min={minTime}
                                max={maxTime}
                                backend={false}
                            />                              
                        </div>                          
                    </MuiThemeProvider>
                </div>
            );
        }
    }

【问题讨论】:

    标签: reactjs firebase


    【解决方案1】:

    您的问题与 firebase 本身无关,而是您将数据传递到日历库的方式,Firebase Timestamp 与 javascript 日期对象不同;我建议尝试这样的事情:

    componentDidMount() {
                this.props.firebase.getReservations().on('value', snapshot => {
                const data = snapshot.val()
                data['start'] = data['start'].toDate()
                data['end'] = data['end'].toDate()
                this.setState({
                    events: snapshot.val(),
                });
            });
        }
    

    【讨论】:

    • 它给了我这个错误 TypeError: Cannot read property 'toDate' of undefined
    • 你 100% 确定 snapshot.val() 正在返回具有 start 和 end 属性的对象?
    • 当我在我的 js 文件中定义数据时,这是有效的。此外,开始和结束属性也在工作。但我不确定它现在是否正在返回一个对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2022-10-15
    • 2019-01-30
    • 2019-12-22
    • 2018-05-17
    • 2019-01-10
    • 2017-04-13
    相关资源
    最近更新 更多