Maison > Article > interface Web > Les étapes correctes pour encapsuler des composants personnalisés dans React
Fond de l'article :
Dans les projets réels, afin d'éviter d'écrire du code en double et de faciliter la maintenance ultérieure, nous pouvons personnaliser l'empaquetage du même style de code dans un composant, puis appelez simplement le composant personnalisé sur la page.
(Partage vidéo d'apprentissage : tutoriel vidéo javascript)
Jetons un coup d'œil aux étapes spécifiques :
1. Encapsulons d'abord le composant personnalisé<.>
1), créez un nouveau dossier CardList 2), créez un nouveau fichier index.js dans le dossier CardList, et écrivez le code suivant dans le fichier index.js ://index.js暴露组件CardList import Card from './card'; import CardList from './cardList'; CardList.Card = Card; export default CardList;3). Créez un nouveau fichier cardList.js dans le dossier CardList, et écrivez le code suivant sous le fichier :
import { Component } from 'react'; import withRouter from 'umi/withRouter'; import style from './index.css'; /** * CardList组件内容 * @param title 组件标题 * @param extra 描述 * @param children 内容 * @param restProps 传入的自定义属性 * @returns {*} * @constructor */ const CardList = ({title, extra, children, ...restProps})=>{ return( <div> <div className={style.card2} {...restProps}> <nav>{title} <span className={style.details}>{extra}</span></nav> {React.Children.map( children, child => (child ? React.cloneElement(child, { }) : child) )} </div> </div> ) } export default CardList;4). Créez un nouveau fichier index.css dans le dossier CardList, et écrivez dans le fichier Style
.card2{ height: auto; background-color: white; padding: 16px; border-bottom: 1px solid #ddd; } .card2 nav{ color: red; text-align: left; font-family: 'Arial Normal', 'Arial'; font-weight: 400; font-style: normal; font-size: 16px; color: #333333; margin-bottom: 0.2rem; } .card2 div{ color: #999999; font-family: 'Arial Normal', 'Arial'; font-weight: 400; font-style: normal; font-size: 14px; } .list1{ text-align: left; display: flex; } .list1>span{ /*width: 50%;*/ display: inline-block; vertical-align: top; /*white-space:nowrap;*/ /*overflow:hidden;*/ /*text-overflow : ellipsis;*/ flex: 1; } .details{ float: right; color:#2DA9FA; }5), créez un nouveau fichier card.js dans le dossier CardList, et écrivez le code suivant sous le fichier :
import { Component } from 'react'; import withRouter from 'umi/withRouter'; import style from './index.css'; /** * 子组件内容 * @param title 标题 * @param children 内容 * @param restProps 传入的自定义属性 * @returns {*} * @constructor */ const Card = ({title,children,...restProps})=>{ return( <div> <div className={style.list1} {...restProps}> <span>{title} {children}</span> </div> </div> ) } export default Card;6), l'utilisation est la suivante suit :
import { Component } from 'react'; import withRouter from 'umi/withRouter'; import router from 'umi/router'; import CardList from './CardList/index'; const {Card} = CardList; class Index extends Component{ state ={ loading:false, totalList:[{"trainCount":2360,"stationName":"北京"},{"trainCount":152,"stationName":"北京东"},{"trainCount":4248,"stationName":"北京南"},{"trainCount":3336,"stationName":"北京西"},{"trainCount":56,"stationName":"通州"}], } render() { let info = <div> { this.state.totalList.map((obj,index)=>{ return <CardList title={`${obj.stationName}站`} extra={<span onClick={()=>{this.jump({obj})}}>查看当天数据</span>} key={index}> <Card title="当天进站列车:">{obj.trainCount||0} 车次</Card> </CardList> }) } </div> return ( <div> {info} </div> ) } } export default withRouter(Index);7), l'effet est le suivant : Recommandations associées :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!