React学习笔记(2)
 请关注 sui 前端共学营及其社区,在这里你可以学到前端和 move 合约语言的知识。
请关注 sui 前端共学营及其社区,在这里你可以学到前端和 move 合约语言的知识。
react组件分两种DOM组件和react组件。
DOM组件是react支持的所有HTML和SVG标签。比如我们写一个img标签给其设置一些属性比如src和alt,这些属性并非纯HTML写法会有些变化,这些像HTML属性的功能在react称为Props。可以结合jsx来进行地址属性设置。我也可以给其做类名设置为与js的class关键字不冲突要更改为另一个名字为className
<img 
    src={logo}
    alt=""
    className="logo"
/>关于style样式的写法 在jsx中style是种键值结构所有它允许使用键值对的方式进行style设置:
<img 
    src={logo}
    alt=""
    className="logo"
    style={{
        width: "100px",
        heigth: "100px",
        backgeoundColor: "grey"
    }}
/>也可以直接书写一个变量再通过插槽形式设置style:
const imgStyle = {
        width: "100px",
        heigth: "100px",
        backgeoundColor: "grey"
    }
<img 
    src={logo}
    alt=""
    className="logo"
    style={imgStyke}
/>jsx还支持展开语法,可以将我们所有属性提前预制一个对象(alt属性无法单独提取出来,jsx规范要求img没有设置alt会提示警告):
const imgData = {
     className: "logo",
     style: {
         width: "100px",
         heigth: "100px",
         backgeoundColor: "grey"
     }
}
<img
    src={logo}
    alt=""
    {...imgData}
/>父组件像子组件进行传值。设置一个组件Article可以接受传值后渲染内容我们通过解构title, content}获取父组件的值。如果有一个需要判断是否存在的值active来决定展示内容可以再接个active,下列代码第一个有active便会显示状态:显示中,而另一个没有active便是其他情况了。
function Article({title, content, active}) {
  return (
    <>
      <h1>{title}</h1>
      <p>{content}</p>
      <p>状态:{active ? "显示中": "已隐藏"}</p>
    </>
  );
}
function App() {
  return (
    <>
      <Article
        title="标题1"
        content="内容1"
        active
      />
      <Article
        title="标题2"
        content="内容2"
      />
    </>
  );
}接下来对内容区进行一个单独的封装,这时像content,active在detail不需要再article使用,将Article中content,active去除单独包一层放入detail中,可以通过解构方式写个articleData给Article组件传给Detail。
function Detail (content, active) {
    return (
        <>
            <p>{content}</p>
            <p>状态:{active ? "显示中": "已隐藏"}</p>
        </>
    )
}
function Article({title, articleData}) {
  return (
    <>
      <h1>{title}</h1>
      <Detail {...articleData}/>
    </>
  );
}
function App() {
  const articleData = {
      title: "标题1",
      detailData: {
          content: "内容1",
          active: true
      }
  }
  return (
    <>
      <Articleru
        {...articleData}
      />
    </>
  );
}若我们在使用List时内部可以有些自定义结构,我们可以使用children
funcion List ({children}) {
    return (
        <ul>
            {children}
        </ul>
    )
}
function App() {
    return (
        <>
            <List>
                <li>内容</li>
                <li>内容</li>
                <li>内容</li>
            </List>
        </>
    )
}现在在List中不单单只有li可能有其他的如title和footer,可能有些没用底部footer的话我们就需要一个默认值。
funcion List ({children, title, footer = <div>默认底部</div>}) {
    return (
       <>
           <h2>{title}</h2>
           <ul>
               {children}
           </ul>
           {footer}
       </>
    )
}
function App() {
    return (
        <>
            <List
                title="列表1"
                footer={<p>这是底部内容1</p>}
            >
                <li>内容</li>
                <li>内容</li>
                <li>内容</li>
            </List>
            <List
                title="列表"
            >
                <li>内容</li>
                <li>内容</li>
                <li>内容</li>
            </List>
        </>
    )
} 
                如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!