- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您能帮我了解呈现内容的逻辑吗?我正在使用 React、Redux、TS 做宠物项目,但在页面加载时遇到内容呈现问题。
其实有两个问题。
第一个问题:
然后我点击另一张卡片,这就是问题所在:5) 我点击另一张卡片并发送新日期的 GET 请求。6)此时状态存储之前的卡片数据并渲染它7) 新数据来自服务器和渲染器。8) 在非常短的时间内,我会看到以前的卡数据......它是闪烁的。动图如下
我的问题是:我应该在点击卡片时将卡片状态重置为其初始状态(空状态)吗?或者应该有另一种方法来做到这一点?
第二个问题:为了解决第一个问题,我添加了 onClick 函数,该函数将卡片状态重置为初始状态:
const initialState: IMovieState = {
movie: {
filmId: 0,
nameRu: '',
nameEn: '',
webUrl: '',
posterUrl: '',
year: 0,
filmLength: '',
slogan: '',
description: '',
type: '',
countries: [],
genres: [],
rating: {
rating: 0,
ratingVoteCount: 0,
ratingImdb: 0,
ratingImdbVoteCount: 0,
},
images: {
posters: [],
},
},
isLoading: false,
movieError: null,
};
这似乎解决了问题 1,但还有另一个...在加载页面上有黄色按钮,图像的替代数据(无法加载)在左上角可见。下面的动图。
我的问题是: 我应该添加一个条件:如果对象键(无论什么键)有数据然后呈现它,或者我应该在状态中添加一个新键,例如 isData: false/true条件将是 if data=true 然后呈现它。
电影页面.tsx
interface IMovieProps {
filmId: string;
}
const MoviePage: React.FC = () => {
const { filmId } = useParams<IMovieProps>();
const dispatch = useDispatch();
const { isLoading, movie, movieError } = useTypedSelector((state) => state.singleMovie);
const { nameRu, nameEn, description, posterUrl, year, genres, filmLength } = movie;
useEffect(() => {
dispatch(fetchMovie(filmId));
}, [filmId, dispatch]);
return (
<section className={styles.section}>
<div className={styles.backgroundImage} style={{ backgroundImage: `url(${posterUrl})` }} />
{isLoading && <Preloader />}
{!isLoading && !!movieError && <Message message={movieError} />}
{!isLoading && !movieError && (
<>
<GoBackLink text={'Назад'} />
<div className={styles.content}>
<img src={posterUrl} alt='Постер' className={styles.poster} />
<div>
<h1 className={styles.title}>{nameRu}</h1>
<h2 className={styles.subtitle}>
{nameEn && `${nameEn}, `}
<span>{year}</span>
</h2>
{filmLength && <p className={styles.subtitle}>Продолжительность: {filmLength} ч</p>}
<ul className={styles.genresList}>
{genres.map(({ genre }, idx) => (
<Genres genre={genre} key={idx} />
))}
</ul>
{description && (
<>
<h3 className={styles.heading}>Описание</h3>
<p className={styles.text}>{description}</p>
</>
)}
</div>
</div>
</>
)}
</section>
);
};
export default MoviePage;
最佳答案
我喜欢做的是我喜欢使用 useState() 条件以及检查特定键是否有数据。我不会在每次点击前重置状态。相反,我检查特定的 post key 是否已经存在 redux 状态的数据。如果那个特定的键有数据,那么我只使用那个数据,而不是在每次呈现相同的组件时都发出获取请求。如果它没有数据,那么我提出请求。
1- 检查项目键是否已经存在数据。如果它不需要发出获取请求,则使用数据来呈现组件。
2- 将数据连接到 redux 存储。不要覆盖状态。
3-以对象的形式存储数据。其中键是项目的唯一键。这样你就可以检查 key 是否存在(例如:data[key]?.length > 0)
希望对您有所帮助。
// example
const [loading, setLoading] = useState(false);
const data = useSelector(getItemData) // here getItemData is a seletor from reselect library
const dispatch = useDispatch();
const hasData = Boolean(data.length)
useEffect(() => {
if (hasData) return;
const fetchData = async () => {
setLoading(true);
await dispatch(fetchItems()); // make fetchItems redux thunk async as well
setLoading(false)
}
fetchData()
}, [condition]);
if (loading) return <div>Loading ...</div>
return <MyComponent />
关于javascript - 呈现内容而不闪烁的正确方法? react + 终极版 + TS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68920806/
意识到这可能是主观的,具体取决于手头的项目,我正在寻找构建 VS (Visual Studio) 解决方案的“最佳实践”方法。 请随意编辑此内容、评论您认为可能不正确的内容、提出替代方案等。我很高兴看
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visi
我维护和协作一些用 CommonJS 编写的 JavaScript 模块,这些模块需要高质量的 UMD 包装器。 依赖项来自 npm 但至少有 CommonJS 和 AMD 支持(或者我可以添加它)。
Intellisense 在我的 VS 上运行得非常糟糕...... 当我用 C++ 编写代码时,它可以 100% 正常工作,直到我开始使用模板,然后它才会完全停止工作,停止检测错误并且不会在所有情况
Microsoft网站具有冲突的信息: http://msdn.microsoft.com/en-us/library/ms182372.aspx ...使用Visual Studio Premium
我是一名优秀的程序员,十分优秀!