javascript - 卡片 onclick 组件未呈现
问题描述
我正在使用卡。单击我要渲染到新组件的组件。我已经为它写了下面的代码 -
function RenderToDetails() {
return (<ItemDetails></ItemDetails>);
}
const renderCardInfo = (card,index) => {
return(
<Card tag="a" key={index} style={{display:'flex', width:'25%', flexWrap:'nowrap', float:'left', cursor: "pointer"}} onClick={RenderToDetails}>
<CardBody>
<CardTitle> {card.value} </CardTitle>
</CardBody>
</Card>
);
};
我可以看到RenderToDetails
函数被调用,但也看不到组件被渲染或在控制台上抛出任何错误。
ItemDetails
点击卡片后如何渲染?
编辑 1:Dashboard.js 的完整代码
import React,{useEffect,useState} from 'react'
import axios from 'axios'
import { Card,CardBody, CardTitle } from 'reactstrap';
import ItemDetails from './ItemDetails';
function Dashboard() {
const initialState = {
data: [],
renderToDetails: false
};
const [state, setstate] = useState(initialState);
useEffect(() => {
const data=[];
const getData=async () => {
await axios.get('https://localhost:44301/api/Login/GetItems')
.then(function (res) {
for (let key in res.data) {
data.push({...res.data[key],id:key});
}
setstate({ data:data });
});
}
getData();
}, []);
function RenderToDetails() {
return (
<ItemDetails></ItemDetails>
);
}
const renderCardInfo = (card,index) => {
return (
<Card tag="a" key={index} style={{display:'flex',width:'25%',flexWrap:'nowrap',float:'left',cursor: "pointer"}} onClick={RenderToDetails} >
<CardBody>
<CardTitle> {card.value} </CardTitle>
</CardBody>
</Card>
);
};
return (
<>
{ state.data.map(renderCardInfo) }
</>
);
}
export default Dashboard;
解决方案
在 onClick 事件中调用RenderToDetails函数不会在仪表板中呈现组件。基本上,你从来没有告诉 react 何时何地渲染你的组件。
因此,您需要将组件添加到渲染函数并切换 showInfo 状态以隐藏/取消隐藏组件。
使用下面的代码 -
import React,{useEffect,useState} from 'react'
import axios from 'axios'
import { Card,CardBody, CardTitle } from 'reactstrap';
import ItemDetails from './ItemDetails';
function Dashboard() {
const initialState = {
data: [],
renderToDetails: false,
showInfo: false
};
const [state, setstate] = useState(initialState);
useEffect(() => {
const data=[];
const getData=async () => {
await axios.get('https://localhost:44301/api/Login/GetItems')
.then(function (res) {
for (let key in res.data) {
data.push({...res.data[key],id:key});
}
setstate({ data:data });
});
}
getData();
}, []);
function RenderToDetails() {
return (
<ItemDetails></ItemDetails>
);
}
const renderCardInfo = (card,index) => {
return (
<Card tag="a" key={index} style={{display:'flex',width:'25%',flexWrap:'nowrap',float:'left',cursor: "pointer"}} onClick={() => setstate({...state, showInfo: !state.showInfo})} >
<CardBody>
<CardTitle> {card.value} </CardTitle>
</CardBody>
</Card>
);
};
return (
<>
{ state.data.map((card, index) => renderCardInfo(card, index)) }
{ state.showInfo && RenderToDetails()}
</>
);
}
export default Dashboard;
推荐阅读
- c# - Microsoft.AspNetCore.Mvc.Controller.TempData.get 返回 null
- java - 在java中排除一定长度的单词的负向Lookbehind
- firebase - Firebase:如何在实时数据库 onCreate 函数中触发 HTTPs onRequest 函数?
- sql - Openquery where 子句使用多个like
- javascript - Else 语句运行两次 javascript
- python - 如何正确使用熊猫矢量化?
- sql - postgresql 上的更新类型
- sql - SQL Server:对 IN 语句使用字符串变量
- php - 如何使用 PHP 将 XML 文件中的数据解析为 MySQL 表,这些 XML 文件的格式不通用且可以更改?
- java - java.lang.arrayindexoutofboundsexception jsoup