Reactjs React/Redux-当切换到第2页时,通过第1页中的Project name select字段选择的值不应更改或刷新

Reactjs React/Redux-当切换到第2页时,通过第1页中的Project name select字段选择的值不应更改或刷新,reactjs,redux,material-ui,Reactjs,Redux,Material Ui,在page1.js中,当我选择一个项目名称时,该项目下的所有区域 项目将显示在表中。当我点击某个特定区域时 页面1将重定向到第2页,显示下的功能 选定区域。在page1中,我有一个名为project name的select字段。 在第2页中,我还有一个名为“项目和区域名称”的选择字段。 当我被重定向到第2页时,项目名称选择在第1页 不应在第2页中刷新,这意味着项目名称 当我们重定向到时,第1页中选择的内容应自动显示 页面 从“React”导入React; 从“道具类型”导入道具类型; 从“@ma

在page1.js中,当我选择一个项目名称时,该项目下的所有区域 项目将显示在表中。当我点击某个特定区域时 页面1将重定向到第2页,显示下的功能 选定区域。在page1中,我有一个名为project name的select字段。 在第2页中,我还有一个名为“项目和区域名称”的选择字段。 当我被重定向到第2页时,项目名称选择在第1页 不应在第2页中刷新,这意味着项目名称 当我们重定向到时,第1页中选择的内容应自动显示 页面

从“React”导入React;
从“道具类型”导入道具类型;
从“@material ui/core/styles”导入{withStyles}”;
从“@material ui/core/Table”导入表格;
从“@material ui/core/TableBody”导入表体;
从“@material ui/core/TableHead”导入表头;
从“@material ui/core/TableCell”导入TableCell;
从“@material ui/core/TableRow”导入TableRow;
从“@material ui/core/Paper”导入纸张;
从“@material ui/core/IconButton”导入IconButton;
从“@material ui/icons/FirstPage”导入FirstPageIcon;
从“@material ui/icons/KeyboardArrowLeft”导入键盘arrowleft”;
从“@material ui/icons/KeyboardArrowRight”导入键盘arrowright”;
从“@material ui/icons/LastPage”导入LastPageIcon;
从“react redux”导入{connect};
从“redux”导入{bindActionCreators};
从“../../actions/index”导入{getallprojects};
从“../../actions/index.js”导入{get_reports_for_area}”;
从“./../actions/index”导入{get_all_area_about_project};
const actionsStyles=主题=>({
根目录:{
flexShrink:0,
颜色:theme.palete.text.secondary,
marginLeft:theme.space.unit*2.5,
},
});
设计数器=0;
函数createData(id、项目、评估完成、完成百分比、级别){
返回{区域id:id,项目,评估完成,完成百分比,级别};
}
常量样式=主题=>({
根目录:{
宽度:“100%”,
marginTop:theme.space.unit*3,
},
表:{
最小宽度:500,
},
包装纸:{
溢出x:'自动',
},
搜索字段:{
保证金:“10px”,
大纲:“无”,
边框:“1px纯色灰色”,
填充:“5px”,
显示:“flex”,
justifyContent:“柔性端”,
对齐项目:“柔性端”,
}
});
类Page1扩展了React.Component{
状态={
行:[],
页码:0,
行页码:5,
过滤器:“”,
项目名称:“”,
区域名称:“”
};
异步组件didmount(){
等待这个。props.getallprojects();
}
handleOnChangeSelectValue=(e)=>{
这是我的国家({
项目名称:e.target.value
}, () => {
this.props.get\u区域的报告(this.state.projectname);
this.props.get\u all\u area\u关于项目(this.state.projectname)
});
}
handleOnChangeareaselectvalue=(e)=>{
这是我的国家({
区域名称:e.target.value
}, () => {
});
}
组件将接收道具=(下一步)=>{
设arr=[];
if(nextrops.getReportAreaRes&&nextrops.getReportAreaRes.response&&nextrops.getReportAreaRes.response.length){
nextProps.getReportAreaRes.response.forEach(异步(元素,索引)=>{
等待arr.push(createData(element.area_id,element.area_name,element.percent,element.percent,element.level));
if(index==nextrops.getReportAreaRes.response.length-1){
this.setState({rows:arr.sort((a,b)=>(a.carries{
})
}
})
}
}
handleOnChangeareaselectvalue=(e)=>{
这是我的国家({
区域名称:e.target.value
});
}
HandleOnChangeFunctionitySelectValue=(e)=>{
这是我的国家({
功能:e.target.value
});
}
handleViewFunctionality=()=>{
this.props.history.push('/app/viewfunctionality/:id');
}
handleChange=事件=>{
this.setState({filter:event.target.value});
};
handleChangePage=(事件,页面)=>{
this.setState({page});
};
handleChangeRowsPerPage=事件=>{
this.setState({page:0,rowsPerPage:event.target.value});
};
render(){
const{classes}=this.props;
const{rows,rowsPerPage,page}=this.state;
const emptyRows=rowsPerPage-Math.min(rowsPerPage,rows.length-page*rowsPerPage);
const{filter}=this.state;
const lowercasedFilter=filter.toLowerCase();
常量filteredData=rows.filter(项=>{
返回Object.key(item).some(key=>
项[key].toString().toLowerCase().includes(小写筛选器)
);
});
返回(
第1页

项目 this.handleOnChangeSelectValue(e)} > 选择 {this.props.getallprojectsRes&&this.props.getallprojectsRes.data&&this.props.getallprojectsRes.data.length>=0&&this.props.getallprojectsRes.data.map((项目,索引)=>( {item.name} ))} {this.state.rows.length!==0?
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Table from '@material-ui/core/Table';
import TableBody from '@material-ui/core/TableBody';
import TableHead from '@material-ui/core/TableHead';
import TableCell from '@material-ui/core/TableCell';
import TableRow from '@material-ui/core/TableRow';
import Paper from '@material-ui/core/Paper';
import IconButton from '@material-ui/core/IconButton';
import FirstPageIcon from '@material-ui/icons/FirstPage';
import KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';
import KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';
import LastPageIcon from '@material-ui/icons/LastPage';
import { connect } from "react-redux";
import { bindActionCreators } from "redux";
import { getallprojects } from '../../actions/index';
import { get_reports_for_area } from '../../actions/index.js';
import { get_all_area_regarding_project } from "../../actions/index";

const actionsStyles = theme => ({

    root: {
        flexShrink: 0,
        color: theme.palette.text.secondary,
        marginLeft: theme.spacing.unit * 2.5,
    },

});

let counter = 0;
function createData(id, project, Assessment_Completion, Achieved_Percentage, Level) {

    return { area_id: id, project, Assessment_Completion, Achieved_Percentage, Level };
}

const styles = theme => ({
    root: {
        width: '100%',
        marginTop: theme.spacing.unit * 3,

    },
    table: {
        minWidth: 500,
    },
    tableWrapper: {
        overflowX: 'auto',
    },

    searchField: {
        margin: '10px',
        outline: 'none',
        border: '1px solid gray',
        padding: '5px',
        display: 'flex',
        justifyContent: 'flex-end',
        alignItems: 'flex-end',
    }
});

class Page1 extends React.Component {
    state = {
        rows: [],
        page: 0,
        rowsPerPage: 5,
        filter: "",
        projectname: '',
        area_name: ''
    };

    async componentDidMount() {
        await this.props.getallprojects();
        }

    handleOnChangeSelectValue = (e) => {
        this.setState({
            projectname: e.target.value
        }, () => {
            this.props.get_reports_for_area(this.state.projectname);
            this.props.get_all_area_regarding_project(this.state.projectname)
        });
    }
    handleOnChangeareaselectvalue = (e) => {
        this.setState({
            area_name: e.target.value
        }, () => {
            
        });
    }

    componentWillReceiveProps = (nextProps) => {
        let arr = [];
        if (nextProps.getReportAreaRes && nextProps.getReportAreaRes.response && nextProps.getReportAreaRes.response.length) {
            nextProps.getReportAreaRes.response.forEach(async (element, index) => {
                await arr.push(createData(element.area_id, element.area_name, element.percent, element.percent, element.level));
                if (index === nextProps.getReportAreaRes.response.length - 1) {
                    this.setState({ rows: arr.sort((a, b) => (a.calories < b.calories ? -1 : 1)) }, () => {
                    })
                }
            })
        }
    }

    handleOnChangeareaselectvalue = (e) => {
        this.setState({
            area_name: e.target.value
        });
    }

    handleOnChangeFunctionalityselectvalue = (e) => {
        this.setState({
            functionality: e.target.value
        });
    }

    handleViewFunctionality = () => {
        this.props.history.push('/app/viewfunctionality/:id');
    }

    handleChange = event => {
        this.setState({ filter: event.target.value });
    };

    handleChangePage = (event, page) => {
        this.setState({ page });
    };

    handleChangeRowsPerPage = event => {
        this.setState({ page: 0, rowsPerPage: event.target.value });
    };

    render() {
        const { classes } = this.props;
        const { rows, rowsPerPage, page } = this.state;
        const emptyRows = rowsPerPage - Math.min(rowsPerPage, rows.length - page * rowsPerPage);
        const { filter } = this.state;
        const lowercasedFilter = filter.toLowerCase();
        const filteredData = rows.filter(item => {
            return Object.keys(item).some(key =>
                item[key].toString().toLowerCase().includes(lowercasedFilter)
            );
        });

        return (
            <div>
                <div className="main-heading">Page 1</div>
                <br />
                <form>
                    <div className="form-group row">
                        <div className="col-sm-3">
                            <div className="field-text"><label>project</label></div>
                            <select
                                className="form-control"
                                id="project name data"
                                name="projectname"
                                value={this.state.projectname}
                                onChange={(e) => this.handleOnChangeSelectValue(e)}
                            >
                                <option>select</option>

                                {this.props.getallprojectsRes && this.props.getallprojectsRes.data && this.props.getallprojectsRes.data.length >= 0 && this.props.getallprojectsRes.data.map((item, index) => (
                                    <option value={item.id}
                                        key={index}>{item.name}</option>
                                ))}
                            </select>
                        </div>
                    </div>
                </form>

                <div className="row">
                    <div className="col-xl-12 col-lg-12">
                        {this.state.rows.length !== 0 ?                           
                                <Paper className={classes.root}>
                                    <div className={classes.tableWrapper}>
                                        <input value={filter} onChange={this.handleChange} placeholder="Search here..." className={classes.searchField} />
                                        <Table className={classes.table}>
                                            <TableHead>
                                                <TableRow>
                                                    <TableCell className={classes.tablehead}>Area</TableCell>
                                                    <TableCell className={classes.tablehead} align="center">Level</TableCell>
                                                </TableRow>
                                            </TableHead>
                                            <TableBody>
                                                {filteredData.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map(row => (
                                                    <TableRow key={row.id}>
                                                        <TableCell component="th" scope="row" className={classes.tablecell} onClick={() => this.handleViewFunctionality()}>
                                                            {row.project}
                                                        </TableCell>
                                                        <TableCell className={classes.tablecell} align="center">{row.Level}</TableCell>

                                                    </TableRow>
                                                ))}
                                                {emptyRows > 0 && (
                                                    <TableRow style={{ height: 48 * emptyRows }}>
                                                        <TableCell colSpan={6} />
                                                    </TableRow>
                                                )}
                                            </TableBody>

                                        </Table>
                                    </div>
                                </Paper>
                             : null
                        }
                    </div>
                </div>
            </div>
        );
    }
}

Page1.propTypes = {
    classes: PropTypes.object.isRequired,
};

function mapStateToProps({ userReducer }) {
    return {
        getallprojectsRes: userReducer.get_all_projects_Data,
        getReportAreaRes: userReducer.get_reports_for_area_Data,
        get_all_area_regarding_projectRes: userReducer.get_all_area_regarding_project_Data,

    };
}

function mapDispatchToProps(dispatch) {
    return bindActionCreators(
        {
            getallprojects: getallprojects,
            get_reports_for_area: get_reports_for_area,
            get_all_area_regarding_project: get_all_area_regarding_project,

        },
        dispatch
    );
}


export default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(Page1));
component / page2.js
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Table from '@material-ui/core/Table';
import TableBody from '@material-ui/core/TableBody';
import TableHead from '@material-ui/core/TableHead';
import TableCell from '@material-ui/core/TableCell';
import TableFooter from '@material-ui/core/TableFooter';
import TablePagination from '@material-ui/core/TablePagination';
import TableRow from '@material-ui/core/TableRow';
import Paper from '@material-ui/core/Paper';
import IconButton from '@material-ui/core/IconButton';
import FirstPageIcon from '@material-ui/icons/FirstPage';
import KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';
import KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';
import LastPageIcon from '@material-ui/icons/LastPage';
import { connect } from "react-redux";
import { bindActionCreators } from "redux";
import { getallprojects } from '../../actions/index';
import { getarea } from '../../actions/index';
import { get_all_area_regarding_project } from "../../actions/index";
import { get_functionalities_regarding_area } from "../../actions/index";
import { get_reports_for_area } from '../../actions/index.js';
import { get_reports_for_functionality } from '../../actions/index.js';

const actionsStyles = theme => ({

    root: {
        flexShrink: 0,
        color: theme.palette.text.secondary,
        marginLeft: theme.spacing.unit * 2.5,
    },

});


let counter = 0;
function createData(id, project, Assessment_Completion, Achieved_Percentage, Level) {
    counter += 1;
    return { functionality_id: id, project, Assessment_Completion, Achieved_Percentage, Level };
}

const styles = theme => ({
    root: {
        width: '100%',
        marginTop: theme.spacing.unit * 3,

    },
    table: {
        minWidth: 500,
    },
    tableWrapper: {
        overflowX: 'auto',
    },

    searchField: {
        margin: '10px',
        borderRadius: '3px',
        outline: 'none',
        border: '1px solid gray',
        padding: '5px',
        display: 'flex',
        justifyContent: 'flex-end',
        alignItems: 'flex-end',
    }
});

class page2 extends React.Component {
    state = {
        rows: [],
        page: 0,
        rowsPerPage: 5,
        filter: "",
        projectname: '',
        area_name: '',
        functionality_name: ''
    };

    async componentDidMount() {
        await this.props.getallprojects();
    }

    handleOnChangeSelectValue = (e) => {
        this.setState({
            projectname: e.target.value
        }, () => {
               this.props.get_all_area_regarding_project(this.state.projectname)
        });
    }

    handleOnChangeareaselectvalue = (e) => {
        this.setState({
            area_name: e.target.value
        }, () => {
            this.props.get_reports_for_functionality(this.state.area_name);
            this.props.get_functionalities_regarding_area(this.state.area_name);

        });
    }

    handleOnChangeFunctionalityselectvalue = (e) => {
        this.setState({
            functionality_name: e.target.value
        }, () => {
            
        });
    }
    componentWillReceiveProps = (nextProps) => {
        console.log("nextProps------------------->", nextProps);
        let arr = [];

        if (nextProps.get_reports_for_functionalityRes && nextProps.get_reports_for_functionalityRes.response && nextProps.get_reports_for_functionalityRes.response.length) {
            nextProps.get_reports_for_functionalityRes.response.forEach(async (element, index) => {
                console.log("Index------------------------>", index)
                await arr.push(createData(element.functionality_id, element.functionality_name, element.percent, element.percent, element.level));
                if (index === nextProps.get_reports_for_functionalityRes.response.length - 1) {
                    this.setState({ rows: arr.sort((a, b) => (a.calories < b.calories ? -1 : 1)) }, () => {
                        console.log("rows---------->", this.state.rows)
                    })
                }
            })
        }
    }

    handleViewSubFunctionality = () => {
        this.props.history.push('/app/viewsubfunctionality/:id');
    }

    handleChange = event => {
        this.setState({ filter: event.target.value });
    };

    handleChangePage = (event, page) => {
        this.setState({ page });
    };

    handleChangeRowsPerPage = event => {
        this.setState({ page: 0, rowsPerPage: event.target.value });
    };



    render() {
        const { classes } = this.props;
        const { rows, rowsPerPage, page } = this.state;
        const emptyRows = rowsPerPage - Math.min(rowsPerPage, rows.length - page * rowsPerPage);

        const { filter } = this.state;
        const lowercasedFilter = filter.toLowerCase();
        const filteredData = rows.filter(item => {
            return Object.keys(item).some(key =>
                item[key].toString().toLowerCase().includes(lowercasedFilter)
            );
        });

        return (
            <div>
                <div className="main-heading">Page 2</div>
                <br />
                <form>
                    <div className="form-group row">
                        <div className="col-sm-3">
                            <div className="field-text"><label> project</label></div>
                            <select
                                className="form-control"
                                id="project name data"
                                name="projectname"
                                value={this.state.projectname}
                                onChange={(e) => this.handleOnChangeSelectValue(e)}
                            >
                                <option>select</option>

                                {this.props.getallprojectsRes && this.props.getallprojectsRes.data && this.props.getallprojectsRes.data.length >= 0 && this.props.getallprojectsRes.data.map((item, index) => (
                                    <option value={item.id}
                                        key={index}>{item.name}</option>
                                ))}
                            </select>
                        </div>
                        <div className="col-sm-3">
                            <div className="field-text"><label className="">Area</label></div>
                            <select
                                className="form-control"
                                id="area name data"
                                name="area_name"
                                value={this.state.area_name}
                                onChange={(e) => this.handleOnChangeareaselectvalue(e)}
                            >
                                <option>select</option>
                                {this.props.get_all_area_regarding_projectRes && this.props.get_all_area_regarding_projectRes.response && this.props.get_all_area_regarding_projectRes.response.length >= 0 && this.props.get_all_area_regarding_projectRes.response.map((item, index) => (
                                    <option value={item.id}
                                        key={index}>{item.name}</option>
                                ))}

                            </select>
                        </div>
                    </div>
                </form>

                <div className="row">
                    <div className="col-xl-12 col-lg-12">
                        {this.state.rows.length !== 0 ?                            
                                <Paper className={classes.root}>
                                    <div className={classes.tableWrapper}>
                                        <input value={filter} onChange={this.handleChange} placeholder="Search here..." className={classes.searchField} />
                                        <Table className={classes.table}>
                                            <TableHead>
                                                <TableRow>
                                                    <TableCell className={classes.tablehead}>Functionality</TableCell>
                                                    <TableCell className={classes.tablehead} align="center">Level</TableCell>
                                                </TableRow>
                                            </TableHead>
                                            <TableBody>
                                                {filteredData.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map(row => (
                                                    <TableRow key={row.id}>
                                                        <TableCell component="th" scope="row" className={classes.tablecell} onClick={() => this.handleViewSubFunctionality()}>
                                                            {row.project}
                                                        </TableCell>
                                                        <TableCell className={classes.tablecell} align="center">{row.Level}</TableCell>

                                                    </TableRow>
                                                ))}
                                                {emptyRows > 0 && (
                                                    <TableRow style={{ height: 48 * emptyRows }}>
                                                        <TableCell colSpan={6} />
                                                    </TableRow>
                                                )}
                                            </TableBody>

                                        </Table>
                                    </div>
                                </Paper>
                           : null
                        }
                    </div>
                </div>
            </div>
        );
    }
}

page2.propTypes = {
    classes: PropTypes.object.isRequired,
};

function mapStateToProps({ userReducer }) {
    return {
        getallprojectsRes: userReducer.get_all_projects_Data,
        getReportAreaRes: userReducer.get_reports_for_area_Data,
        get_all_area_regarding_projectRes: userReducer.get_all_area_regarding_project_Data,
        getfunctionality_regarding_areaRes: userReducer.functionality_regarding_area_Data,
        get_reports_for_functionalityRes: userReducer.get_reports_for_functionalityData,

    };
}

function mapDispatchToProps(dispatch) {
    return bindActionCreators(
        {
            getallprojects: getallprojects,
            get_reports_for_area: get_reports_for_area,
            get_all_area_regarding_project: get_all_area_regarding_project,
            get_functionalities_regarding_area: get_functionalities_regarding_area,
            get_reports_for_functionality: get_reports_for_functionality,

        },
        dispatch
    );
}

export default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(page2));