09-05-2021
React Component 是基於元件化的思考模式
state
(使用useState
修改)以及props
(从父元素中传入资料),再者透过生命周期控制component对於元件的处理。
(image via maketea)
<div>
视为HTML的<div>
标签<Doggy / >
则视为一个component,且需要在作用域中使用到<Doggy / >
component就像是一个个拆解开来的function,他可以接受任意的参数(props)传递,并且将回传React element所写的画面。同时component 可以将UI 拆解成独立且可以重复利用的程序码,我们即可以将每个component 独立看待。
本身就是JavaScript 的funtion,stateless component(没有状态的component)没有内部状态、没有实作物件、没有ref、没有生命周期函数。
若非需要控制生命周期的话
,建议使用stateless component
,可以获得较好的效能
我们简单的定义一个React component,因为在这里面他只接受一个props(属性)
物件,并且回传一个React element。
范例:
function Doggy(props) {
return <h1>我是可爱的, {props.name}</h1>;
}
重新整理一下思绪,我们昨天在element 的章节里提到的~
const element = <p>这是第一个显示的文字</p>;
同时React element 也是可以自己定义成component
const element = <Doggy name="狗狗" />;
但是,<Doggy name="Sara" />
该怎麽显示呢?关於更深入的传递方式,在制作一集专门介绍的篇章记录一下。
当React 看到我们自定义component的element时,就会将JSX属性以及childern(内容)
当作single object
传递给该一个component,而这其中的object
就是props
function Doggy(props) {
return <h1>我是可爱的, {props.name}</h1>;
}
const element = <Doggy name="狗狗" />;
ReactDOM.render(
element,
document.getElementById('root')
);
我们在const element = <Doggy name="狗狗" />
使用了ReactDOM render()
呼叫他
并在<Doggy name="狗狗" />
以 {name: '狗狗'}
当作 props
传入Doggy
的component 并且return呼叫他。
当 Doggy component
回传了 <h1>我是可爱的, {props.name}</h1>
返回这个element
再来 ReactDOM 就会将DOM更新成我是可爱的,狗狗
const people = ['Rowe', 'Prevost', 'Gare'];
const peopleLis = people.map(person)=>
// expression goes here:
<li>{person}</li>
);
// ReactDOM.render goes here:
ReactDOM.render(<ul>{peopleLis}</ul>,document.getElementById('app'))
使用.map 回圈
设定要显示的person变数内容
用peopleLis
作为component
最後DOM出来在ul里面peopleLis
回圈出来的li
内容
const peopleLis = people.map((person,i) =>
// expression goes here:
<li key={'person_' + i} >{person}</li>
);
可以进行复杂的操作和元件生命周期的控制,但是相对於 stateless components 耗费资源
class Doggy extends React.Component {
render() {
return <h1>我是可爱的, {this.props.name}</h1>;
}
}
import React from 'react';
import ReactDOM from 'react-dom';
import {NavBar} from './NavBar.js';
//用花括号表示引入的component名称
class ProfilePage extends React.Component {
render() {
return (
<div>
<NavBar />
<h1>All About Me!</h1>
<p>I like movies and blah blah blah blah blah</p>
<img src="https://content.codecademy.com/courses/React/react_photo-monkeyselfie.jpg" />
</div>
);
}
}
在component前面加上export 就可以将NavBar引入进来
//范例
import React from 'react';
export class NavBar extends React.Component {
render() {
const pages = ['home', 'blog', 'pics', 'bio', 'art', 'shop', 'about', 'contact'];
const navLinks = pages.map(page => {
return (
<a href={'/' + page}>
{page}
</a>
)
});
return <nav>{navLinks}</nav>;
}
}
<上篇>
那今天就把昨天的东西讲完吧 然後我觉得标题好难定 POPcat 这麽赞的内容竟然没人看 QQ 那这边...
今天要来介绍Intersection、Type guard。 Intersection 型别是把两种...
先让子弹打到敌机,可以让敌机受伤.毁坏,那首先给敌机一个受伤的动画,这次就用Animation创造一...
一、为何要做标准化 以最简单的方式来说,一份资料中,不可能每个特徵的范围都是一样的,当我们需要拿两笔...
昨天说的是单一档案上传,如果要多个档案上传的话... 建立新栏位 资料表先新增可以储存一个阵列的栏位...