Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.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 如何识别数组的某个对象id以更改同一对象中元素的状态?_Javascript_Reactjs_Material Ui - Fatal编程技术网

Javascript 如何识别数组的某个对象id以更改同一对象中元素的状态?

Javascript 如何识别数组的某个对象id以更改同一对象中元素的状态?,javascript,reactjs,material-ui,Javascript,Reactjs,Material Ui,我试图在阵列中确定展开时的特定面板,并能够将该面板的id连接到按钮,以及在没有展开面板或展开多个面板时禁用按钮。不管什么原因,它根本不接受身份证。另外,我在如何正确禁用按钮方面遇到了问题 export default class WorkoutList extends Component { constructor(props) { super(props); this.state = { workoutlist: [

我试图在阵列中确定展开时的特定面板,并能够将该面板的id连接到按钮,以及在没有展开面板或展开多个面板时禁用按钮。不管什么原因,它根本不接受身份证。另外,我在如何正确禁用按钮方面遇到了问题

export default class WorkoutList extends Component {
    constructor(props) {
        super(props);
        this.state = {
            workoutlist: [
                {
                    id: uuid.v4(),
                    name: 'Leg Day',
                    date: '08/09/19',
                    duration: 60,
                    exerciselist: [
                        {
                            id: uuid.v4(),
                            exerciseName: 'Squats',
                            numberOfSets: 3,
                            reps: 12,
                            weight: 135,
                        },
                        {
                            id: uuid.v4(),
                            exerciseName: 'Leg press',
                            numberOfSets: 3,
                            reps: 10,
                            weight: 150,
                        },
                        {
                            id: uuid.v4(),
                            exerciseName: 'Lunges',
                            numberOfSets: 4,
                            reps: 12,
                        },
                    ],
                    selected: false,
                },
                {
                    id: uuid.v4(),
                    name: 'Arm Day',
                    date: '08/10/19',
                    duration: 90,
                    exerciselist: [
                        {
                            id: uuid.v4(),
                            exerciseName: 'Bench Press',
                            numberOfSets: 5,
                            reps: 5,
                            weight: 225,
                        },
                        {
                            id: uuid.v4(),
                            exerciseName: 'Chest Flies',
                            numberOfSets: 3,
                            reps: 10,
                            weight: 50,
                        },
                        {
                            id: uuid.v4(),
                            exerciseName: 'Tricep Extensions',
                            numberOfSets: 4,
                            reps: 12,
                            weight: 70,
                        },
                    ],
                    selected: false,

                },
                {
                    id: uuid.v4(),
                    name: 'Running',
                    date: '08/11/19',
                    duration: 40,
                    exerciselist: [],
                    selected: false,

                },
            ],
            disabled: false
        }
        this.handleSelectedPanel = this.handleSelectedPanel.bind(this);
        this.handleButton = this.handleButton.bind(this);
    }

    handleSelectedPanel(id) {
        const { workoutlist } = this.state;
        this.setState({
            workoutlist: workoutlist.map(workout => {
                if (workout.id === id) {
                    workout.selected = !workout.selected
                }
                return workout;
            })
        })
    }

    handleButton(){
        const { workoutlist, disabled } = this.state;
        let count = 0;
        workoutlist.map((workout) => {
            if(workout.selected === true) {
                count = count + 1;
            }
            return count;
        })
        if (count !== 1) {
            this.setState({
                disabled: true
            })
        } else {
            this.setState({
                disabled: false
            })
        }
        return disabled;
    }

    render() {
        const { workoutlist } = this.state;
        return (
            <div>
                <CssBaseline />
                <ClientMenuBar title="My Workouts" />
                <div style={styles.workoutlist}>
                    <Paper style={styles.paper} elevation={0}>
                        {workoutlist.map((workout) => (
                            <WorkoutItem
                                key={workout.id}
                                workout={workout}
                                onSelectedPanel={this.handleSelectedPanel}
                            />
                        ))}
                    </Paper>
                    <Button
                        variant="contained"
                        color="primary"
                        size="small"
                        style={styles.button}
                        disabled={this.handleButton}
                    >
                        Start Workout
                    </Button>
                </div>
            </div>
        )
    }
}
导出默认类WorkoutList扩展组件{
建造师(道具){
超级(道具);
此.state={
工作清单:[
{
id:uuid.v4(),
名称:'腿日',
日期:'08/09/19',
持续时间:60,
练习表:[
{
id:uuid.v4(),
练习名称:“蹲下”,
数目:3,,
代表:12,
体重:135,
},
{
id:uuid.v4(),
练习名称:'腿部按压',
数目:3,,
代表:10,
体重:150,
},
{
id:uuid.v4(),
练习名称:“弓箭步”,
数目:4,,
代表:12,
},
],
选择:false,
},
{
id:uuid.v4(),
名称:“武装日”,
日期:'08/10/19',
持续时间:90,
练习表:[
{
id:uuid.v4(),
练习名称:“台式压力机”,
数目:5,,
代表:5名,,
体重:225,
},
{
id:uuid.v4(),
练习名称:“胸蝇”,
数目:3,,
代表:10,
体重:50,
},
{
id:uuid.v4(),
练习名称:“三头肌延伸”,
数目:4,,
代表:12,
体重:70,
},
],
选择:false,
},
{
id:uuid.v4(),
名称:“正在运行”,
日期:'08/11/19',
持续时间:40,
练习表:[],
选择:false,
},
],
禁用:false
}
this.handleSelectedPanel=this.handleSelectedPanel.bind(this);
this.handleButton=this.handleButton.bind(this);
}
无手柄选择面板(id){
const{workoutlist}=this.state;
这是我的国家({
workoutlist:workoutlist.map(锻炼=>{
如果(workout.id==id){
workout.selected=!workout.selected
}
回程训练;
})
})
}
把手扣(){
const{workoutlist,disabled}=this.state;
让计数=0;
workoutlist.map((训练)=>{
如果(workout.selected==真){
计数=计数+1;
}
返回计数;
})
如果(计数!==1){
这是我的国家({
残疾人士:对
})
}否则{
这是我的国家({
禁用:false
})
}
返回残疾人;
}
render(){
const{workoutlist}=this.state;
返回(
{workoutlist.map((训练)=>(
))}
开始训练
)
}
}
导出默认类WorkUtiItem扩展组件{
建造师(道具){
超级(道具);
this.handleSelectedPanel=this.handleSelectedPanel.bind(this);
}
无手柄选择面板(e){
此.props.onSelectedPanel(e.target.id);
}
render(){
const{id,name,date,duration,exerciselist}=this.props.workout;
返回(
{name}
({date})
~{duration}分钟
名称
#集合
代表
重量
{exerciselist.map((练习)=>(
))}
编辑
)
}
}
它似乎根本没有接收id,当我尝试禁用按钮时,它会抛出以下错误:

警告:失败的道具类型:无效的道具
已禁用
类型
export default class WorkoutItem extends Component {
    constructor(props){
        super(props);
        this.handleSelectedPanel = this.handleSelectedPanel.bind(this);
    }

    handleSelectedPanel(e) {
        this.props.onSelectedPanel(e.target.id);
    }

    render() {
        const { id, name, date, duration, exerciselist } = this.props.workout;
        return (
            <ExpansionPanel style={styles.panel} id={id} onChange={this.handleSelectedPanel}>
                <ExpansionPanelSummary>
                    <Typography variant="button" style={{ width: "33%" }}>
                        {name}
                    </Typography>
                    <Typography variant="button" style={{ width: "33%" }}>
                        ({date})
                    </Typography>
                    <Typography align="right" style={{ width: "33%" }}>
                        ~{duration} mins
                    </Typography>
                </ExpansionPanelSummary>
                <ExpansionPanelDetails>
                    <Table size="medium" style={styles.table}>
                        <TableHead>
                            <TableRow>
                                <TableCell padding="none">Name</TableCell>
                                <TableCell padding="none" align="right"># of sets</TableCell>
                                <TableCell padding="none" align="right">reps</TableCell>
                                <TableCell padding="none" align="right">weight</TableCell>
                            </TableRow>
                        </TableHead>
                        <TableBody>
                            {exerciselist.map((exercise) => (
                                <ExerciseList
                                    key={exercise.id}
                                    exercise={exercise}
                                />
                            ))}
                        </TableBody>
                    </Table>
                    <ExpansionPanelActions disableSpacing style={styles.actionButton}>
                        <Button color="primary" size="small" disableRipple>
                            edit
                        </Button>
                    </ExpansionPanelActions>
                </ExpansionPanelDetails>
            </ExpansionPanel>
        )
    }
}
<Button
    variant="contained"
    color="primary"
    size="small"
    style={styles.button}
    disabled={this.handleButton}
>
handleSelectedPanel(e) {
    this.props.onSelectedPanel(e.target.id);
}
handleSelectedPanel(e) {
    this.props.onSelectedPanel(this.props.workout.id);
}