javascript - React/next.js - 为什么组件不能由我定义的序列生成?
问题描述
我有一个布局:
import React from 'react'
import Header from '../components/layout/common/Header'
import Footer from '../components/layout/common/Footer'
import GoToTop from '../components/layout/common/GoToTop'
import { withTranslation } from '../i18n'
const Layout = (props) => {
return (
<main>
<Header />
{props.children}
<Footer />
<GoToTop />
</main>
)
}
export default withTranslation('common')(Layout)
我用它Layout
来构建一个这样的about
页面about.js
:
import React from 'react'
import Layout from '../../layout/Layout'
import GeneratorSeo from '../../components/GeneratorSeo'
import PromoBanner from '../../components/layout/common/PromoBanner'
import promos from '../../constants/promo-banner'
import Breadcrumbs from '../../components/layout/common/Breadcrumbs'
import HomeClient from '../../components/layout/home/HomeClient'
import AboutContent from '../../components/layout/about/AboutContent'
const About = () => {
const pageTitle = 'About';
const aboutPromo = promos.filter((item, index) => {
return item.subtitle === pageTitle.toLowerCase()
})[0];
return (
<Layout>
<GeneratorSeo title={pageTitle} />
<PromoBanner {...aboutPromo} />
<Breadcrumbs {...aboutPromo} />
<AboutContent />
<HomeClient />
</Layout>
)
}
export default About
但是我的about
页面不是按照我在about.js
.
它是这样生成的:Header --> GeneratorSeo & PromoBanner & Breadcrumbs --> HomeClient --> Footer --> GoToTop --> AboutContent
当我about
再次刷新页面时,顺序是正确的。
我有AboutContent.js
:
import React, { Fragment, createRef } from 'react'
import ReactComment from '../../ReactComment'
import aboutContents from '../../../constants/about'
import { withTranslation } from '../../../i18n'
import Slider from 'react-slick'
const settingSlider = {
className: 'js-carousel u-carousel-v12',
autoplay: true,
dot: false,
infinite: true,
arrows: false,
autoplaySpeed: 5000
}
const renderArrows = slider => {
return (
<div className="slider-arrow">
<div className="js-prev u-arrow-v1 g-width-20 g-height-20 g-pos-abs g-bottom-minus-30 g-left-0
g-color-main g-color-primary--hover fa fa-angle-left slick-arrow"
onClick={() => slider.current.slickPrev()} />
<div className="js-next u-arrow-v1 g-width-20 g-height-20 g-pos-abs g-bottom-minus-30 g-left-0
g-color-main g-color-primary--hover fa fa-angle-right g-ml-30 slick-arrow"
onClick={() => slider.current.slickNext()} />
</div>
);
};
const AboutContent = props => {
const contentLength = aboutContents.length;
const refSlide1 = createRef();
const refSlide2 = createRef();
const refSlide3 = createRef();
return (
<Fragment>
<ReactComment text={'AboutContent'} />
<div className="container">
{
aboutContents.map((content, index) => {
let refSlide = refSlide1;
if (index === 0) {
refSlide = refSlide1;
} else if (index === 1) {
refSlide = refSlide2;
} else {
refSlide = refSlide3;
}
return (
<span key={index}>
<div className="row g-pt-100 g-pb-30--lg">
<div className={"col-lg-6 g-mb-100 " + (index % 2 != 0 && "order-lg-2")}>
<div className="g-pos-rel">
<div style={{ position: "relative" }}>
{renderArrows(refSlide)}
<Slider
{...settingSlider}
ref={refSlide}
>
{
content.sliderImgs.map((img, i) => {
return (
<div className="js-slide">
<img className="img-fluid" src={img} alt="Image Description" />
</div>
)
})
}
</Slider>
</div>
<div className="g-pos-abs g-bottom-minus-30 g-right-0 g-right-minus-20--sm">
<a className="js-fancybox d-flex g-text-underline--none--hover" href="javascript:;"
data-src="//www.youtube.com/embed/BNpiwOkKIJ8?autoplay=1"
data-speed="350"
data-caption="Video Popup">
<span className="g-color-main g-font-weight-500 g-font-size-13 mt-auto mr-4">{props.t(content.sliderTitle)}</span>
<span className="u-icon-v3 u-icon-size--lg g-color-white g-bg-primary g-bg-main--hover rounded g-pos-rel g-z-index-1 g-cursor-pointer">
<i className="g-font-size-17 g-pos-rel g-left-2 fa fa-play"></i>
</span>
</a>
</div>
</div>
</div>
<div className={"col-lg-6 g-mb-100 " + (index % 2 != 0 && "order-lg-1")}>
<div className="g-pl-40--lg">
<div className="mb-5">
<h3 className="mb-4">{props.t(content.title)}</h3>
<p className="g-line-height-2">{props.t(content.content)}</p>
</div>
</div>
</div>
</div>
{index != contentLength - 1 && (<hr className="g-brd-gray-light-v4 my-0" />)}
</span>
)
})
}
</div>
<ReactComment text={'End AboutContent'} />
</Fragment >
)
}
export default withTranslation('about')(AboutContent)
我猜它AboutContent.js
有插件https://react-slick.neostack.com/和一个map
这样可以比其他组件生成得慢?我不知道为什么,我还没有找到解决方案。请帮我!
解决方案
推荐阅读
- c# - 如何将选择的 DropDownList 值传递给我的控制器函数,然后在 TextArea 中显示输出
- javascript - 如何使用 Link 标签在 react routerv5 中将函数作为道具传递
- sql - SQL Server 存储过程中的动态 where 条件
- next.js - afterInteractive 和lazyOnload 策略有什么区别?
- javascript - 如何在删除重复项的同时比较和组织 3 个单独的数组中的对象数据
- python - 如何按日期过滤并转换日期时间
- java - 在 Android Studio 中从 xml 解析特定数据
- r - 按列名中的特定字符对 PCA 图表进行分组
- google-sheets - 如何获取单元格中空格分隔单词中的最后一项?
- xml - 如何将大型 XML 文件发送到下游服务