Javascript 如何从函数返回变量并显示它
我有一个功能组件,其中有一个按钮。我想在点击该按钮时打印一个JSON字符串。但是,每当我试图返回某个内容时,它就会给出一个错误 我的组成部分: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
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'));