Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Reactjs 为什么我的道具在发送到组件时未定义?_Reactjs_React Router_Axios_React Hooks - Fatal编程技术网

Reactjs 为什么我的道具在发送到组件时未定义?

Reactjs 为什么我的道具在发送到组件时未定义?,reactjs,react-router,axios,react-hooks,Reactjs,React Router,Axios,React Hooks,我的项目中有一个表,我有一个编辑/查看/添加页面,可以从此表访问该页面。我的目标是将单击的数据毫无问题地发送到另一个组件,但是无论我如何努力,我都会得到一个未定义的错误,并且项目被破坏。如果你能帮忙,我会很高兴的 我正在从父组件到子组件共享我的代码 表页 import React, { useState, useEffect, useCallback, useMemo } from "react"; import ManagementTable from '../compon

我的项目中有一个表,我有一个编辑/查看/添加页面,可以从此表访问该页面。我的目标是将单击的数据毫无问题地发送到另一个组件,但是无论我如何努力,我都会得到一个未定义的错误,并且项目被破坏。如果你能帮忙,我会很高兴的

我正在从父组件到子组件共享我的代码

表页

import React, { useState, useEffect, useCallback, useMemo } from "react";
import ManagementTable from '../components/ManagementTable'
import {
  getApps,
  updateStopRisk,
  countLiveCountry,
  updateAppShow,
  deleteApp,
} from "../api/apiCalls";
import VisibilityIcon from "@material-ui/icons/Visibility";
import DeleteIcon from "@material-ui/icons/Delete";
import EditIcon from "@material-ui/icons/Edit";
import Switch from "@material-ui/core/Switch";
import DeleteModal from "../components/DeleteModal";
import { Link } from "react-router-dom";

const Management = () => {
  const [apps, setApps] = useState([]);
  const [modalVisible, setModalVisible] = useState(false);
  const [currentApp, setCurrentApp] = useState("");
  const [appID, setAppID] = useState(0);

  const fetchData = useCallback(async () => {
    const { data: appsResponse } = await getApps();
    const countLiveCountries = await fetchLiveCountriesForApps(appsResponse);
    setApps(
      appsResponse.map((app, idx) => ({
        ...app,
        countLiveCountry: countLiveCountries[idx],
      }))
    );

  }, []);

  useEffect(() => {
    fetchData();

  }, [fetchData]);

  const fetchLiveCountriesForApps = async (appwLive) => {
    const countLiveCountries = await Promise.all(
      appwLive.map((app) => countLiveCountry(app.appID))
    );
    return countLiveCountries.map(({ data: liveCountries }) => liveCountries);
  };

  const removeApp = async () => {
    await deleteApp(appID);
    setModalVisible(false);
    fetchData();
  };

  const onClickCancel = () => {
    setModalVisible(false);
  };

  const columns = useMemo(() => [
    {
      Header: "Application Name",
      accessor: "app_name",
    },
    {
      Header: "Business Area",
      accessor: "businessarea.businessarea_name",
    },
    {
      Header: "Live Plants",
      accessor: "countLiveCountry",
    },
    {
      Header: "Line Stop Risk",
      accessor: "app_stoprisk",
      Cell: ({ row: { original } }) => {

        const changeCheck = async (id) => {
          await updateStopRisk(id);
          fetchData();
        };
        return (
          <input
            checked={original.app_stoprisk}
            onClick={() => {
              changeCheck(original.appID);
            }}
            id="appStopRisk"
            type="checkbox"
            style={{ width: 18, height: 18, marginTop: 5 }}
          />
        )
      },
      sortType: (a, b, id) => {
        if (a.original[id] > b.original[id]) return -1;
        if (b.original[id] > a.original[id]) return 1;
      },
    },
    {
      Header: "Actions",
      Cell: ({ row: { original } }) => {
        const changeTrack = async (id) => {
          await updateAppShow(id);
          fetchData();
        };
        return (
          <>
            <Link
              className="btn btn-manage-link btn-sm col-2"
              to={{
                pathname: `/management/${original.app_name}`,
                mode: "view",
                id: original.appID
              }}
            >
              <VisibilityIcon></VisibilityIcon>
            </Link>
            <Link
              to={{
                pathname: `/management/${original.app_name}`,
                mode: "edit",
                id: original.appID
              }}
              className="btn btn-manage-link btn-sm col-2"
            >
              <EditIcon></EditIcon>
            </Link>
            <button
              onClick={() => {
                setModalVisible(true);
                setCurrentApp(original.app_name);
                setAppID(original.appID);
              }}
              className="btn btn-manage-link btn-sm col-3"
            >
              <DeleteIcon></DeleteIcon>
            </button>
            <Switch
              onClick={() => changeTrack(original.appID)}
              checked={original.app_show}
              className="col-3"
            ></Switch>
          </>
        )
      },
    },
  ],
    [fetchData]
  );

  return (
    <div className="container">
      <h2 style={{ float: "left", font: "bold" }}>Management</h2>
      <div style={{ float: "right" }}>
        <Link className="btn btn-danger btn-sm" to={{ pathname: `/management/add`, mode: "add" }}>
          Add New App
          </Link>
        <Link className="btn btn-danger btn-sm ml-3" exact to="/management/plants">
          Plant Management
          </Link>
      </div>
      <ManagementTable columns={columns} data={apps} />
      <DeleteModal
        message={<strong>{currentApp}</strong>}
        variety="app"
        onClickCancel={onClickCancel}
        onClickOk={removeApp}
        visible={modalVisible}
      />
    </div>
  );
};

export default Management;
import React,{useState,useffect,useCallback,usemo}来自“React”;
从“../components/ManagementTable”导入ManagementTable
进口{
getApps,
updateStopRisk,
countLiveCountry,
updateAppShow,
删除应用程序,
}来自“./api/apicall”;
从“@material ui/icons/Visibility”导入VisibilityIcon;
从“@material ui/icons/Delete”导入DeleteIcon;
从“@material ui/icons/Edit”导入编辑图标;
从“@material ui/core/Switch”导入开关;
从“./components/DeleteModal”导入DeleteModal;
从“react router dom”导入{Link};
常数管理=()=>{
const[apps,setApps]=useState([]);
const[modalVisible,setModalVisible]=使用状态(false);
const[currentApp,setCurrentApp]=useState(“”);
const[appID,setAppID]=useState(0);
const fetchData=useCallback(异步()=>{
const{data:appsResponse}=await getApps();
const countLiveCountries=等待获取livecountriesforaps(appsResponse);
setApps(
appsResponse.map((app,idx)=>({
…应用程序,
countLiveCountry:countLiveCountries[idx],
}))
);
}, []);
useffect(()=>{
fetchData();
},[fetchData]);
const fetchLiveCountriesForApps=async(appwLive)=>{
const countLiveCountries=等待承诺(
appwLive.map((app)=>countLiveCountry(app.appID))
);
returncountlivecountries.map({data:liveCountries})=>liveCountries);
};
const removeApp=async()=>{
等待删除app(appID);
setModalVisible(假);
fetchData();
};
const onClickCancel=()=>{
setModalVisible(假);
};
const columns=useMemo(()=>[
{
标题:“应用程序名称”,
访问者:“应用程序名称”,
},
{
标题:“业务区域”,
访问者:“businessarea.businessarea_name”,
},
{
标题:“活植物”,
访问者:“countLiveCountry”,
},
{
标题:“行停止风险”,
访问者:“应用程序停止风险”,
单元格:({行:{original}})=>{
常量更改检查=异步(id)=>{
等待更新PRISK(id);
fetchData();
};
返回(
{
变更检查(原件,appID);
}}
id=“appStopRisk”
type=“复选框”
样式={{宽度:18,高度:18,边距:5}}
/>
)
},
排序类型:(a、b、id)=>{
如果(a.original[id]>b.original[id])返回-1;
如果(b.原件[id]>a.原件[id])返回1;
},
},
{
标题:“行动”,
单元格:({行:{original}})=>{
const changeTrack=async(id)=>{
等待更新AppShow(id);
fetchData();
};
返回(
{
setModalVisible(真);
setCurrentApp(原始的应用程序名称);
setAppID(原始.appID);
}}
className=“btn btn管理链路btn sm col-3”
>
changeTrack(original.appID)}
选中={original.app_show}
className=“col-3”
>
)
},
},
],
[获取数据]
);
返回(
管理层
添加新应用程序
工厂管理
);
};
导出默认管理;
我转移道具的页面

import React, { useState, useEffect } from "react";
import Accordion from "../components/Accordion";
import Details from '../components/Details'
import {
  getByIdApps,
} from "../api/apiCalls";

const ApplicationManagement = (props) => {

  const [appById, setAppById] = useState([]);
  const { id } = props.location;
  const [selectOption, setSelectOption] = useState('add')

  useEffect(() => {
    getData();
    getMode();
  }, [])

  const getData = async () => {
    console.log(props.location.id)
    if (props.location.id) {
      await getByIdApps(props.location.id).then((response) => setAppById(response.data))
      console.log(appById)
      console.log(props)
    }
    else {
      setSelectOption('add')
    }
  }

  const getMode = () => props.location.mode ? setSelectOption(props.location.mode) : setSelectOption('add')

  const handleOptionChange = (event) => {
    console.log(event.target.value)
    setSelectOption(event.target.value)
  }

  return (
    <>
      <div style={{ margin: 20 }}>
        <h1>
          {appById.app_shortcode} - {appById.app_fullname}
        </h1>
        <div className="float-right mb-auto">
          <label><input type="radio" value="view" checked={selectOption === 'view'} onChange={handleOptionChange} />View</label>
          <label> <input type="radio" value="add" checked={selectOption === 'add'} onChange={handleOptionChange} />Add</label>
          <label> <input type="radio" value="edit" checked={selectOption === 'edit'} onChange={handleOptionChange} />Edit</label>
        </div>
        <br></br>
        
          <div style={{ marginLeft: 50, marginRight: 50 }} >
            <Accordion
              title={
                <div style={{ width: 1350 }}>
                  <h3>Details</h3>
                  <hr style={{ backgroundColor: "#aaa" }}></hr>
                </div>
              }
              content={
                <Details appID={id} data = {appById}></Details>
              }
            />
            <Accordion title={
              <div style={{ width: 1350 }}>
                <h3>Links</h3>
                <hr style={{ backgroundColor: "#aaa" }}></hr>
              </div>
            }></Accordion>
            <Accordion title={
              <div style={{ width: 1350 }}>
                <h3>Factory Management</h3>
                <hr style={{ backgroundColor: "#aaa" }}></hr>
              </div>
            }></Accordion>
            <Accordion title={
              <div style={{ width: 1350 }}>
                <h3>Issues Management</h3>
                <hr style={{ backgroundColor: "#aaa" }}></hr>
              </div>
            }></Accordion>
            <Accordion title={
              <div style={{ width: 1350 }}>
                <h3>Middleware Management</h3>
                <hr style={{ backgroundColor: "#aaa" }}></hr>
              </div>
            }></Accordion>
          </div>) 
          
          {selectOption === 'add'  ? (
            <div>
              Add Mode
            </div>
          ) : selectOption === 'view' ?  (<div>View Mode</div>) : (<div>eidt</div>)}
      </div>
    </>
  );
};

export default ApplicationManagement;

import React,{useState,useffect}来自“React”;
从“./组件/手风琴”导入手风琴;
从“../components/Details”导入详细信息
进口{
getByIdApps,
}来自“./api/apicall”;
const ApplicationManagement=(道具)=>{
const[appById,setAppById]=useState([]);
const{id}=props.location;
const[selectOption,setSelectOption]=useState('add')
useffect(()=>{
getData();
getMode();
}, [])
const getData=async()=>{
console.log(props.location.id)
if(props.location.id){
等待getByIdApps(props.location.id)。然后((response)=>setAppById(response.data))
console.log(appById)
控制台日志(道具)
}
否则{
setSelectOption('add')
}
}
const getMode=()=>props.location.mode?setSelectOption(props.location.mode):setSelectOption('add')
const handleOptionChange=(事件)=>{
console.log(event.target.value)
setSelectOption(event.target.value)
}
返回(
{appById.app_shortcode}-{appById.app_fullname}
看法
添加
编辑


) {selectOption==='add'( 添加模式 ):selectOption===‘查看’?(查看模式):(eidt)} ); }; 导出默认应用程序管理;
以及ApplicationManagement页面上保存详细信息的部分(我的代码很长,我只分享问题部分)

import React,{useState,useffect}来自“React”
从“axios”导入axios;
进口{
获取责任记录,
getBusinessAreas
}来自“../api/apiCalls”
常量详细信息=(道具)=>{
常量[rTeams,setrTeams]=useState([]);
const[bAreas,setbeareas]=useState([]);
const{data}=props;
useffect(()=>{
异步函数fetchData(){
const getrTeams=等待getResponsibleTeams();
const getbAreas=等待getBusinessAreas();
阿西
import React, { useState, useEffect } from 'react'
import axios from "axios";

import {
  getResponsibleTeams,
  getBusinessAreas
} from '../api/apiCalls'


const Details = (props) => {

  const [rTeams, setrTeams] = useState([]);
  const [bAreas, setbAreas] = useState([]);


  const { data } = props;

  useEffect(() => {
    async function fetchData() {
      const getrTeams = await getResponsibleTeams();
      const getbAreas = await getBusinessAreas();
      axios.all([getrTeams, getbAreas]).then(
        axios.spread((...allData) => {
          const allrTeams = allData[0].data;
          const allbAreas = allData[1].data;
          setrTeams(allrTeams);
          setbAreas(allbAreas);
        })
      );
    }
    fetchData();
  }, []);

  return (
    <div>
      <div
        style={{
          float: "left",
          width: 1350,
          height: 340,
        }}
      >
          <div className="form-group">
            <label style={{ float: "left" }} htmlFor="appFullName">
              Frontend:{" "}
            </label>
            <input
              id="appFullName"
              type="text"
              class="form-control"
              placeholder="dsfdsdsf"
              value={data.frontend.frontend_name} // error here
              //onChange={handleInputChange}
              name="appShortCode"
              style={{ width: 400, marginLeft: 150 }}
            />
          </div>

      </div>
    </div>
  )
}

export default Details;


<Accordion
              title={
                <div style={{ width: 1350 }}>
                  <h3>Details</h3>
                  <hr style={{ backgroundColor: "#aaa" }}></hr>
                </div>
              }
              content={
                <Details appID={id} data = {appById}></Details>
              }
            />

{appById &&
            <Accordion
              title={
                <div style={{ width: 1350 }}>
                  <h3>Details</h3>
                  <hr style={{ backgroundColor: "#aaa" }}></hr>
                </div>
              }
              content={
                <Details appID={id} data = {appById}></Details>
              }
            />}