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