开发者问题收集

React Native Wix 日历标记日期显示错误

2018-10-02
493

我正在为我的项目使用 wix 日历,我已经按照其他问题中提到的所有步骤操作了类似主题。

我已经像这样编码了

class TutorCalender extends Component {

    static navigationOptions = {
        header: null,
        final_array: {},
        tution_array: [],
        unavailable_array: []
    }
    componentWillMount = async () => {
        try {
            let { data } = await axios
                .post("https://chat.qualpros.com/api/get_tutor_calendar", {
                    tutor_id: 4
                })
                .then(response => {
                    console.log(response.data.data.tutor_private_tution_date_array);
                    if (response.data.data.status === "success") {
                        this.setState({
                            tution_array: response.data.data.tutor_private_tution_date_array,
                            unavailable_array: response.data.data.tutor_schedule_unavailable_array,
                        });
                    } else {
                        alert("Something went wrong");
                    }
                });
        } catch (err) {
            console.log(err);
        }
        // console.log(this.state.tution_array.length);
        //console.log(this.state.tution_array);
        if (this.state.tution_array.length !== 0) {
            console.log('tution available')
            var objP = Object.assign(
                ...this.state.tution_array.map(o => ({
                    [o]: { selected: true, selectedColor: "green", type: "present" }
                }))
            );
            this.setState({ final_array : objP});
            console.log(this.state.final_array)
        }
        // var merged = { ...objP };
        // // console.log("Came Here");
        // this.setState({ final_array: merged });
        // console.log(this.state.final_array)
    }
    render() {
        return (
            <Container>
                <Header style={{ backgroundColor: '#d91009' }}>

                    <Left style={styles.left}>
                        <TouchableOpacity
                            style={styles.backArrow}
                            onPress={() => this.props.navigation.navigate("ProfileScreen")}
                        >
                            <FontAwesome
                                name="angle-left"
                                size={30}
                                color='#fff'
                            />
                        </TouchableOpacity>
                    </Left>
                    <Body>
                        <Text style={{ alignSelf: Platform.OS == 'android' ? 'center' : 'center' }}>Tutor calender</Text>
                    </Body>
                    <Right />
                </Header>

                {/*     <Text style={styles.text}>Calendar with marked dates and hidden arrows</Text> */}
                <Calendar
                    style={styles.calendar}
                    firstDay={1}
                    //markedDates={this.state.final_array}
                //hideArrows={true}
                />
            </Container>
        );
    }
}
export default TutorCalender;

如果我注释 markedDates prop,它工作正常,对于 console.log(this.state.final_array),我得到的响应如下: Object { “2018-10-01”:Object { “selected”:true, “selectedColor”: “green”, “type”: “present”, },

但是当我取消注释 markedDates={this.state.final_array} 时,它给了我错误“TypeError:null 不是对象(评估'this.state.final_array'”

我不明白我错在哪里,我已经按照提到的所有步骤操作了,提前谢谢

2个回答

单独定义状态,这里你在静态导航中定义了状态,这是错误的

Kedar Dave
2018-10-02

当状态尚未通过所需信息更新(加载)时,就会发生这种情况,因此值为空。要解决这个问题,您可以设置初始值或设置条件来检查数组是否不为空(在赋值之前)。

Ali Bakhtiar
2018-10-02