我在这个 React Bootstrap Slider 上显示动态数据。有没有办法让代码更高效?
I am displaying dynamic data on this React Boostrap Slider. Is there a way to make the code more efficient?
这是我第一次 post 来这里。我正在构建一个 React Boostrap Carousel,它从数据库中提取电影数据并显示它。我是 React 和一般编程的新手。到目前为止,我使代码工作。但我不知道如何处理图像。图片存储在 React **src/assets/imgs 中。 **。我应该像 ../../assets/imgs/the-batman.jpg 这样在数据库中存储对图像的引用然后显示它吗?如果是这样,稍后在项目中管理员将必须创建一个 MovieOfTheMonth。他应该能够输入电影标题、描述等,还可以上传电影图像。有没有办法在上传图像时将其存储到特定文件夹,在本例中为 src/assets/imgs 并在数据库中创建引用?我这里不需要解决方案,只是告诉我它是否可以实现。最后有没有办法改进我的代码?
this is my full code for this component
import React, {useState, useEffect } from 'react';
import './Carousel.css'
import Carousel from 'react-bootstrap/Carousel';
import 'bootstrap/dist/css/bootstrap.min.css';
import axios from 'axios';
const CarouselHero = () => {
//boostrap code
const [index, setIndex] = useState(0);
const handleSelect = (selectedIndex, e) => {
setIndex(selectedIndex);
};
//Get Movies of the month
const [movie, setMovie] = useState([])
const getMovie = () => {
axios.get("http://localhost:4000/moviesOfTheMonth")
.then((res) => {
const myMovie = res.data
myMovie.push()
setMovie(myMovie);
})
}
useEffect(() => getMovie(), []);
return (
<Carousel activeIndex={index} onSelect={handleSelect} fade>
{movie.map((item) => {
const {id, title, description} = item.Movie
return (
<Carousel.Item interval={2000}>
<img
src={require("../../assets/imgs/the-batman.jpg")}
alt="First slide"
/>
<Carousel.Caption >
<h1>{title}</h1>
<p>{description}</p>
<button>Book Now</button>
</Carousel.Caption>
</Carousel.Item>
)
})}
</Carousel>
);
};
export default CarouselHero;
我认为从技术上讲,遍历资产文件夹并为新图像创建数据库条目(创建和比较哈希?)是可以实现的,但通常不是您这样做的方式。我会将图像放在 S3 等文件存储中,并使用 id 引用它们。
我不知道你的项目中的管理员是谁,但如果管理员不是技术人员,你可以创建(当然也可以使用模板)一个小而简单的管理仪表板,其中 he/she 可以通过 UI.
维持一个月的电影
最后对您的代码做一些评论:
const handleSelect = (selectedIndex, e) => { setIndex(selectedIndex); };
- 如果你只需要第一个参数,而不需要第二个、第三个等参数,你可以将其省略:(selectedIndex) => ...
const [movie, setMovie] = useState([])
- 不要忘记在每个语句后使用分号。 (它们是可选的,但有时对避免奇怪的错误很有用)。另外,你在这里有一个列表。所以也许称它为“电影”更好。
myMovie.push()
- 你想在这里推送什么?
useEffect(() => getMovie(), []);
- 通常你直接在useEffect中定义和调用async函数。你没有得到任何提示或警告吗?
movie.map((item) => {
- 当您迭代并返回一个列表时,React 需要每个元素上的键(此处为 Carousel.Item)。不要只使用索引,因为这是一种不好的做法。始终尝试在您的数据中查找 id 属性。
const {id, title, description} = item.Movie
- 为什么数据被 Movie 对象嵌套?就不能直接说 item.id、item.title、item.description 吗?
这是我第一次 post 来这里。我正在构建一个 React Boostrap Carousel,它从数据库中提取电影数据并显示它。我是 React 和一般编程的新手。到目前为止,我使代码工作。但我不知道如何处理图像。图片存储在 React **src/assets/imgs 中。 **。我应该像 ../../assets/imgs/the-batman.jpg 这样在数据库中存储对图像的引用然后显示它吗?如果是这样,稍后在项目中管理员将必须创建一个 MovieOfTheMonth。他应该能够输入电影标题、描述等,还可以上传电影图像。有没有办法在上传图像时将其存储到特定文件夹,在本例中为 src/assets/imgs 并在数据库中创建引用?我这里不需要解决方案,只是告诉我它是否可以实现。最后有没有办法改进我的代码?
this is my full code for this component
import React, {useState, useEffect } from 'react';
import './Carousel.css'
import Carousel from 'react-bootstrap/Carousel';
import 'bootstrap/dist/css/bootstrap.min.css';
import axios from 'axios';
const CarouselHero = () => {
//boostrap code
const [index, setIndex] = useState(0);
const handleSelect = (selectedIndex, e) => {
setIndex(selectedIndex);
};
//Get Movies of the month
const [movie, setMovie] = useState([])
const getMovie = () => {
axios.get("http://localhost:4000/moviesOfTheMonth")
.then((res) => {
const myMovie = res.data
myMovie.push()
setMovie(myMovie);
})
}
useEffect(() => getMovie(), []);
return (
<Carousel activeIndex={index} onSelect={handleSelect} fade>
{movie.map((item) => {
const {id, title, description} = item.Movie
return (
<Carousel.Item interval={2000}>
<img
src={require("../../assets/imgs/the-batman.jpg")}
alt="First slide"
/>
<Carousel.Caption >
<h1>{title}</h1>
<p>{description}</p>
<button>Book Now</button>
</Carousel.Caption>
</Carousel.Item>
)
})}
</Carousel>
);
};
export default CarouselHero;
我认为从技术上讲,遍历资产文件夹并为新图像创建数据库条目(创建和比较哈希?)是可以实现的,但通常不是您这样做的方式。我会将图像放在 S3 等文件存储中,并使用 id 引用它们。
我不知道你的项目中的管理员是谁,但如果管理员不是技术人员,你可以创建(当然也可以使用模板)一个小而简单的管理仪表板,其中 he/she 可以通过 UI.
维持一个月的电影最后对您的代码做一些评论:
const handleSelect = (selectedIndex, e) => { setIndex(selectedIndex); };
- 如果你只需要第一个参数,而不需要第二个、第三个等参数,你可以将其省略:(selectedIndex) => ...
const [movie, setMovie] = useState([])
- 不要忘记在每个语句后使用分号。 (它们是可选的,但有时对避免奇怪的错误很有用)。另外,你在这里有一个列表。所以也许称它为“电影”更好。myMovie.push()
- 你想在这里推送什么?useEffect(() => getMovie(), []);
- 通常你直接在useEffect中定义和调用async函数。你没有得到任何提示或警告吗?movie.map((item) => {
- 当您迭代并返回一个列表时,React 需要每个元素上的键(此处为 Carousel.Item)。不要只使用索引,因为这是一种不好的做法。始终尝试在您的数据中查找 id 属性。const {id, title, description} = item.Movie
- 为什么数据被 Movie 对象嵌套?就不能直接说 item.id、item.title、item.description 吗?