Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在函数之后以状态存储对象_Javascript_Reactjs_State - Fatal编程技术网

Javascript 在函数之后以状态存储对象

Javascript 在函数之后以状态存储对象,javascript,reactjs,state,Javascript,Reactjs,State,我为我的拙劣语言提前道歉。阅读问题只需30秒 我有以下代码: constructor(props) { super(props); this.state = { report: [], reports: [], donaters: [], donate_report: [], donaters_count: [],

我为我的拙劣语言提前道歉。阅读问题只需30秒

我有以下代码:


    constructor(props) {
        super(props);
        this.state = {
            report: [],
            reports: [],
            donaters: [],
            donate_report: [],
            donaters_count: [],
            donaters_recurrent_count: [],
            dates: [],
            menu: [
                {
                    key: 2018,
                    title: "2019",
                    opened: true,
                    info: [
                        {
                            key: 11,
                            title: 'dec',
                            opened: false,
                            content: []
                        }, {
                            key: 10,
                            title: 'nov',
                            opened: false,
                            content: []
                        }, {
                            key: 9,
                            title: 'oct',
                            opened: false,
                            content: []
                        }]
                },
                {
                    key: 2019,
                    title: "2018",
                    opened: false,
                    info: [
                        {
                            key: 1,
                            title: 'jan',
                            opened: false,
                            content: []
                        }]
                }],
            active_menu: 2018,
            active_month: [],
            active_info: [],
        }
    }

    componentDidMount(value) {
        const {active_menu} = this.state;
        fetch(`${api.root}/donate_report?year=${active_menu}`, {param: value})
            .then((response) => response.json())
            .then((donate_report) => {
                this.setState({
                    report: donate_report.report[0].reports,
                    donaters: donate_report.report[0].donaters,
                    active_info: active_menu.info
                })
            })
    }


    toggleInfo(index) {
        const info = this.state.active_info.slice();
        info[index].opened = !info[index].opened;
        this.setState({
            active_info: info,
            active_month: info[index].key,
            dates: this.state.donaters[info[index].key][info[index].key + 1][0]
        })
    }

    toggleMenu(menu, value) {
        if (this.state.active_menu !== menu) {
            this.setState({active_menu: menu, mobile_menu_opened: false, menu_changed: true});
        fetch(`${api.root}/donate_report?year=${this.state.active_menu}`, {param: value})
                .then((response) => response.json())
                .then((donate_report) => {
                    this.setState({
                        report: donate_report.report[0].reports,
                        donaters: donate_report.report[0].donaters,
                        dates: donate_report.report[0].donaters[this.state.active_month][this.state.active_month + 1][0],
                        active_info: this.state.menu.info
                    });
                    console.log('update');
                });
        }
    }
请告诉我,如果
menu.key
等于
active\u menu

我可以使用我的功能
toggleMenu()
,将所选菜单分配到状态
active\u菜单

对不起,如果我写得不准确,我会尽量详细写:

如果用户选择2019年,
active_菜单
菜单
(2019年为
2019
:)中获取键,在
active_月
,获取整个
信息

{
key: 1,
title: 'jan',
opened: false,
content: []
}

谢谢你的回答和建议

您需要使用按键查找菜单项。您可以实现如下内容:

   function getMenuInfoByKey (state, key) {
      let menuObj = state.menu.find(menuItem => menuItem.key === key);
      return menuObj && menuObj.info || null;
    }
然后您可以轻松地使用它
让selectedmenuinfobj=getMenuInfoByKey(this.state,'2019')

   function getMenuInfoByKey (state, key) {
      let menuObj = state.menu.find(menuItem => menuItem.key === key);
      return menuObj && menuObj.info || null;
    }