Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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 - Fatal编程技术网

Javascript 如何从函数返回变量并显示它

Javascript 如何从函数返回变量并显示它,javascript,reactjs,Javascript,Reactjs,我有一个功能组件,其中有一个按钮。我想在点击该按钮时打印一个JSON字符串。但是,每当我试图返回某个内容时,它就会给出一个错误 我的组成部分: const emp_details= (props) => { function getdata(data){ //console.log('button clicked'); console.log(data); let result = data.reduce((r,c) => (r[c.company

我有一个功能组件,其中有一个按钮。我想在点击该按钮时打印一个JSON字符串。但是,每当我试图返回某个内容时,它就会给出一个错误

我的组成部分:

const emp_details= (props) => {

  function getdata(data){
    //console.log('button clicked');

   console.log(data);
    let result = data.reduce((r,c) => 
  (r[c.company_code] = [...(r[c.company_code] || []), c.emp_code]) && r, {})

    const json = {emp_details : result};
    //console.log(JSON.stringify(json))

   return JSON.stringify(json);

  }

return (

      <div>
        <button onClick= {getdata(props.details)}>Display </button>

      </div>

    );

  };

export default ShoppingCart;

您正在设置的
onClick
不是函数
getdata
,而是函数
getdata
返回的值

当需要向函数传递参数时,使用包装函数all call函数

<button onClick= {() => getdata(props.details)}>Display </button>
getdata(props.details)}>Display

您正在设置的
onClick
不是函数
getdata
,而是函数
getdata
返回的值

当需要向函数传递参数时,使用包装函数all call函数

<button onClick= {() => getdata(props.details)}>Display </button>
getdata(props.details)}>Display

之所以会发生这种情况,是因为在组件呈现时,您正在调用
getdata()
。要解决这个问题,您需要向事件侦听器传递一个匿名函数,当事件实际发生时,它将调用此函数

  <div>
    <button onClick= {() => getdata(props.details)}>Display</button>

  </div>

getdata(props.details)}>Display
要在单击按钮后获得显示在组件内部的数据,我们需要采用某种状态管理来强制组件重新渲染

让我们考虑下面的代码:

Index.js
从“React”导入React;
从“react dom”导入react dom;
从“react”导入{useState};
从“/ShoppingCart”导入ShoppingCart;
常量详细信息=[
{
emp_代码:“a001”,
公司代码:“公司a”,
名称:“abx”,
详情:[],
详细信息\u数据类型:[]
},
{
emp_代码:“b002”,
公司代码:“公司b”,
名称:“xbz”,
详情:[],
详细信息\u数据类型:[]
},
{
emp_代码:“a002”,
公司代码:“公司a”,
名称:“xbz”,
详情:[],
详细信息\u数据类型:[]
},
{
emp_代码:“b003”,
公司代码:“公司b”,
名称:“xbz”,
详情:[],
详细信息\u数据类型:[]
}
];
常量应用=()=>{
返回(
);
};
const rootElement=document.getElementById(“根”);
render(,rootElement);
因此,在上面的代码中,我们将数据作为名为details的属性传递给ShoppingCart

ShoppingCart.js
从“React”导入React;
从“react”导入{useState};
const ShoppingCart=道具=>{
//这将按该顺序为我们提供状态值和状态更新函数。我们传入了默认值“”
const[companys,setcompanys]=useState({});
函数getdata(数据){
让结果=data.reduce(
(r,c)=>
(r[c.公司代码]=[…(r[c.公司代码]| |[]),c.emp|U代码]&&r,
{}
);
控制台日志(结果);
//创建数据对象,然后更新状态值,强制组件重新渲染
设定公司(结果);
}
//这将创建一个加价。当我们获得更新的公司状态值时,它将再次被调用。
常量createMarkup=()=>{
//我们现在将使用更新后的公司状态值
让markup=Object.entries(companys.map)(
([companyName,array],索引)=>{
返回(
{companyName}:

{array.map((emp,empIndex)=>{ 返回

{emp}

; })} ); } ); 返回标记; }; 返回( //将在重新渲染时执行createMarkup(),以显示标记 {createMarkup()} getdata(props.details)}>Display ); }; 导出默认购物车;
我们将存储在props.detail中的数据作为getData()的参数传入。getData()将把它解析为我们需要的结构,并返回一个结果。然后我们将结果存储在钩子状态中


当组件重新呈现时,我们调用createMarkup(),从而为我们提供包含所有公司和员工信息的JSX。

之所以会出现这种情况,是因为在组件呈现时,您正在调用您的
getdata()
。要解决这个问题,您需要向事件侦听器传递一个匿名函数,当事件实际发生时,它将调用此函数

  <div>
    <button onClick= {() => getdata(props.details)}>Display</button>

  </div>
function Emp_details(props) {
    function getdata(){
    console.log(props.details);
    }
  return <div><button onClick= {getdata}>Display </button></div>

}



ReactDOM.render(<Emp_details details = "John Doe"/>, document.getElementById('root'));

getdata(props.details)}>Display
要在单击按钮后获得显示在组件内部的数据,我们需要采用某种状态管理来强制组件重新渲染

让我们考虑下面的代码:

Index.js
从“React”导入React;
从“react dom”导入react dom;
从“react”导入{useState};
从“/ShoppingCart”导入ShoppingCart;
常量详细信息=[
{
emp_代码:“a001”,
公司代码:“公司a”,
名称:“abx”,
详情:[],
详细信息\u数据类型:[]
},
{
emp_代码:“b002”,
公司代码:“公司b”,
名称:“xbz”,
详情:[],
详细信息\u数据类型:[]
},
{
emp_代码:“a002”,
公司代码:“公司a”,
名称:“xbz”,
详情:[],
详细信息\u数据类型:[]
},
{
emp_代码:“b003”,
公司代码:“公司b”,
名称:“xbz”,
详情:[],
详细信息\u数据类型:[]
}
];
常量应用=()=>{
返回(
);
};
const rootElement=document.getElementById(“根”);
render(,rootElement);
因此,在上面的代码中,我们将数据作为名为details的属性传递给ShoppingCart

ShoppingCart.js
从“React”导入React;
从“react”导入{useState};
const ShoppingCart=道具=>{
//这将按该顺序为我们提供状态值和状态更新函数。我们传入了默认值“”
const[companys,setcompanys]=useState({});
函数getdata(数据){
让结果=data.reduce(
(r,c)=>
(r[c.公司代码]=[…(r[c.公司代码]| |[]),c.emp|U代码]&&r,
{}
);
控制台日志(结果);
//创建数据对象,然后更新状态值,强制组件重新渲染
设定公司(结果);
}
//这将创建一个加价。当我们获得更新的公司状态值时,它将再次被调用。
骗局
function Emp_details(props) {
    function getdata(){
    console.log(props.details);
    }
  return <div><button onClick= {getdata}>Display </button></div>

}



ReactDOM.render(<Emp_details details = "John Doe"/>, document.getElementById('root'));