美文网首页
react第4天

react第4天

作者: 怎么昵称 | 来源:发表于2022-11-17 17:43 被阅读0次

props

子组件 需要传入两个参数
person size
父组件使用到子组件
在组件使用中传入 person size

包中包

utils.js 根据传入的参数 获取当前地址

export function getImageUrl(person, size="s"){
    return (
        'http://dede/'+ person.imageId
        +size+        
        +'.jpg'
    )
}


app.js

import {getImageUrl } from './utils.js'

function Avatar({person, size}){
 return (
    <img 
     className="avatar"
     src={ getImageUrl(person) }
     alt={person.name}
     width={size}
     height={size}
    />
 )
}

export default function Profile(){
    return (
        <div>
            <Avatar
             size={100}
             person =  {{
                name: 'Saruhuashi',
                imageId: 'YfeOqp2'
             }} />

            <Avatar
                size={80}
                person={{
                name: 'Aklilu Lemma', 
                imageId: 'OKS67lh'
                }}
            />

        </div>
    )
}





由一个值通过传入函数  判断当前显示的是否是哪个 

function Item({name, isPacked}){
 if(isPacked){
 return <li className ="item">{name} LL</li>
 }
 return <li className="item">{name}</li>
}

export default function PackingList(){
    return (
        <section>
          <h1>djeidje</h1>
        <ul>
           <Item  
           isPacked = {true}
           name="dedede"
           />
         <Item  
           isPacked = {false}
           name="kkkk"
           />

        </ul>
        </section>
    )
}

当某个条件成立 不想render 任何东西时 可以return null

function Item({ name, isPacked }) {
  if (isPacked) {
    return null;
  }
  return <li className="item">{name}</li>;
}

也可以通过判断isPacked 用 ? render 显示的文本

return (
  <li className="item">
    {isPacked ? name + ' ✔' : name}
  </li>
);

也可以通过再判断逻辑中加入 dom标签

function Item({name, isPacked}){
    // 内部做逻辑判断 显示不同的dom
    return (
        <li className="item">
           {isPacked ? (
            <del>
                {name + '✔'}
            </del>
           ): (
            name
           )}

        </li>
    )
}


export default function PackingList(){
    return (
        <section>
            <h1>Packing list</h1>
            <ul>
                <Item
                isPacked = {true}
                name ="Space suiy"
                >
                </Item>

                <Item
                isPacked = {false}
                name ="Space ujhuhu"
                >
                </Item>
            </ul>
        </section>
    )
}


render arr list



import Gallery from './Gallery.js'

import { people } from './data.js';
import { getImageUrl } from './utils.js';
export  default function List(){
    const listItems = people.map(person=>
        // 要加入key值 要不然会报错
        <li key= {person.id}>
           <img 
           src={getImageUrl(person)}
           alt={person.name}
           >
            <p>
                <b>{person.name}</b>
            </p>

           </img>
        </li>
    )
    return <ul>{listItems}</ul>
}

为什么一定要加人key
并且key的值最好不要是index
因为在遍历对象的每个属性进行深度对比,非常耗性能
react使用key进行对比,如果不指定则默认为index 下标
index下标不好的原因是
只会从上到下依次对比树的不同
并没有去找当前项是否是存在项
而只是对比排序中的第一个 第二个

<div key="1">bob</div> | <div key="1">new-guy</div> 
<div key="2">sue</div> | <div key="2">bob</div> 
                                         | <div key="3">sue</div>


不能识别,并且会非常耗费性能去做这件事
所以找到一个唯一的key很重要
推荐id或者name能够代表唯一的值
这样就只需要做一个unshift操作,节省性能

相关文章

网友评论

      本文标题:react第4天

      本文链接:https://www.haomeiwen.com/subject/lsfpxdtx.html