尝试使用 API 中的数据填充 BootstrapTable
Trying to populate BootstrapTable with the data from the API
javascript/react 这里是新手。我正在尝试使用 api 中的数据填充 Bootstrap 中的 Table。我制作了两个组件 - Dashboard.js 和 CustomTable.js,它们都可以正常工作。据我所知,我需要在 Dashboard 组件上进行 API 调用——我已经使用 useEffect 和 axios 完成了该操作。在 CustomTable.js 上,我需要对列和数据使用 useState。我想让我的 table 动态,包括行和列。看看我的 Dashboard.js.
代码
const Dashboard = (props) => {
let state = [(columns: []), (data: [])];
useEffect(() => {
axios
.get(`https://reqres.in/api/users?page=2`)
.then((res) => {
console.log(res);
setData(res.data);
})
.catch((err) => {
console.log(err);
});
}, [data]);
return (
<div className="dashboard-content">
<Header />
<NewMessage />
<CustomTable data={data} columns={columns} />
</div>
);
};
接下来,我得到了我的 CustomTable.js 功能组件,我尝试从我的 Parent(Dashboard.js) 组件传递道具,但我不知道下一步该去哪里。
export default function CustomTable(props) {
const [data, setData] = useState(props.data);
const [columns, setColumns] = useState(props.columns);
return (
<div>
<Table striped bordered hover>
<thead>
<tr>
{columns.map((row) => {
return <th>{row.name}</th>;
})}
</tr>
</thead>
<tbody>
{data.map((row) => {
return (
<tr>
<td>{row.id}</td>
<td>{row.email}</td>
<td>{row.first_name}</td>
<td>{row.last_name}</td>
</tr>
);
})}
</tbody>
</Table>
</div>
);
}
如果所有这些听起来很愚蠢,我很抱歉,但我真的很想完成这个任务并继续学习。谢谢!
让我们替换这个
let state = [(columns: []), (data: [])];
与:
const [data, setData] = useState({ cols: null, data: null });
使您的 Dashboard
组件看起来像这样:
const Dashboard = (props) => {
const [data, setData] = useState({ cols: null, data: null });
useEffect(() => {
axios
.get(`https://reqres.in/api/users?page=2`)
.then((res) => {
const cols = Object.keys(res.data.data[0]).map((i) => i);
setData({ data: res.data.data, cols });
})
.catch((err) => {
console.log(err);
});
}, []);
return (
<div className="dashboard-content">
{data.data && <CustomTable data={data.data} cols={data.cols} />}
</div>
);
};
您的 CustomTable
元素实际上什至不需要任何状态变量,所以我们可以让它看起来像这样:
const CustomTable = ({ data, cols }) => {
return (
<div>
<Table striped bordered hover>
<thead>
<tr>
{cols.map((j, i) => (
<th key={i}>{j}</th>
))}
</tr>
</thead>
<tbody>
{data.map((row, i) => {
return (
<tr key={i}>
<td>{row.id}</td>
<td>{row.email}</td>
<td>{row.first_name}</td>
<td>{row.last_name}</td>
<td>{row.avatar}</td>
</tr>
);
})}
</tbody>
</Table>
</div>
);
};
这就是您所需要的全部。这是一个沙盒供您使用:https://codesandbox.io/s/compassionate-architecture-s9dl2?file=/src/App.js
javascript/react 这里是新手。我正在尝试使用 api 中的数据填充 Bootstrap 中的 Table。我制作了两个组件 - Dashboard.js 和 CustomTable.js,它们都可以正常工作。据我所知,我需要在 Dashboard 组件上进行 API 调用——我已经使用 useEffect 和 axios 完成了该操作。在 CustomTable.js 上,我需要对列和数据使用 useState。我想让我的 table 动态,包括行和列。看看我的 Dashboard.js.
代码 const Dashboard = (props) => {
let state = [(columns: []), (data: [])];
useEffect(() => {
axios
.get(`https://reqres.in/api/users?page=2`)
.then((res) => {
console.log(res);
setData(res.data);
})
.catch((err) => {
console.log(err);
});
}, [data]);
return (
<div className="dashboard-content">
<Header />
<NewMessage />
<CustomTable data={data} columns={columns} />
</div>
);
};
接下来,我得到了我的 CustomTable.js 功能组件,我尝试从我的 Parent(Dashboard.js) 组件传递道具,但我不知道下一步该去哪里。
export default function CustomTable(props) {
const [data, setData] = useState(props.data);
const [columns, setColumns] = useState(props.columns);
return (
<div>
<Table striped bordered hover>
<thead>
<tr>
{columns.map((row) => {
return <th>{row.name}</th>;
})}
</tr>
</thead>
<tbody>
{data.map((row) => {
return (
<tr>
<td>{row.id}</td>
<td>{row.email}</td>
<td>{row.first_name}</td>
<td>{row.last_name}</td>
</tr>
);
})}
</tbody>
</Table>
</div>
);
}
如果所有这些听起来很愚蠢,我很抱歉,但我真的很想完成这个任务并继续学习。谢谢!
让我们替换这个
let state = [(columns: []), (data: [])];
与:
const [data, setData] = useState({ cols: null, data: null });
使您的 Dashboard
组件看起来像这样:
const Dashboard = (props) => {
const [data, setData] = useState({ cols: null, data: null });
useEffect(() => {
axios
.get(`https://reqres.in/api/users?page=2`)
.then((res) => {
const cols = Object.keys(res.data.data[0]).map((i) => i);
setData({ data: res.data.data, cols });
})
.catch((err) => {
console.log(err);
});
}, []);
return (
<div className="dashboard-content">
{data.data && <CustomTable data={data.data} cols={data.cols} />}
</div>
);
};
您的 CustomTable
元素实际上什至不需要任何状态变量,所以我们可以让它看起来像这样:
const CustomTable = ({ data, cols }) => {
return (
<div>
<Table striped bordered hover>
<thead>
<tr>
{cols.map((j, i) => (
<th key={i}>{j}</th>
))}
</tr>
</thead>
<tbody>
{data.map((row, i) => {
return (
<tr key={i}>
<td>{row.id}</td>
<td>{row.email}</td>
<td>{row.first_name}</td>
<td>{row.last_name}</td>
<td>{row.avatar}</td>
</tr>
);
})}
</tbody>
</Table>
</div>
);
};
这就是您所需要的全部。这是一个沙盒供您使用:https://codesandbox.io/s/compassionate-architecture-s9dl2?file=/src/App.js