const AwesomeHeader = () => {
return (
<h1>用const注册组件</h1>
)
}
复制代码
class AwesomeContent extends React.Component {
// 须要在render方法里去return 我们要渲染的内容
render () {
return (
<div>使用语法糖注册组件</div>
<Fragment>使用语法糖注册组件</Fragment>
)
}
}
复制代码
注意点: 组件每一个单词首字母必须大写; Fragment是react 16以后新增的组件,用它包裹就不会产生多余的DOM元素; return里面是JSX,外层必须有根元素包裹;javascript
ReactDOM.render(
//调用时外层需包一个根元素,或者使用Fragment包裹
<div className="app">
//当组件里面没有内容是建议使用空元素,推荐使用自闭合
<AwesomeHeader/>,
<AwesomeContent/>
</div>
)
复制代码
在render方法中的return内部是JSX,因此在JSX里面若是想写JS的代码,必须加上 “{}”java
{/*若是想在return中写注释或者其余JS代码,必须在外层加上 “{}” */}
复制代码
若是你想在组件中插入其余内容,这时就须要组件嵌套,否则插入的内容将没法显示react
// react dom里提供了一个render方法,用于渲染JSX(javascriptxml)组件或者元素
ReactDOM.render(
<div className="app">
<AwesomeHeader>我想在这里显示内容,可是他不会出来<AwesomeHeader/>
</div>
)
复制代码
react的特殊props,表示组件的子元素,因为使用继承的方式注册组件,可用this.props来获取ios
class AwesomeContent extends React.Component {
console.log(this.props)
render (){
return (
<div>
{/* react里props.children是一种特殊的props,就表示一个组件的子元素 */}
{/* 因为我们使用的是继承的方式来写组件,因此,这里得用this.props来获取 */}
<h1>{this.props.children}</h1>
</div>
)
}
}
复制代码
const AwesomeHeader = (props) => {
console.log(props)
cosnt headerText = 'awesome react'
return (
<h1>{headerText}-{props.children}</h1>
)
}
复制代码
父组件调用子组件,若是想在子组件里面传参,可直接在父组件调用子组件的地方写上属性,属性除了字符串都要加上 “{}” ,子组件可经过 “props.属性名” 来访问bash
<AwesomeHeader
headerText="Hello World"
loginFn{()=>{
console.log('方法')
}}
/>
复制代码
AwesomeHeader是一个函数式的组件,因此能够在内部经过props.属性名来访问app
通常会在src文件夹中新建一个components专门放组件的js文件,相似这样,快捷键:rccdom
//首先引入React和他的Component方法
import React, { Component } from 'react'
//再将class定义的这一整段组件export出去
export default class AwesomeContent extends Component {
render() {
console.log(this.props)
return (
<div>
{/* react里props.children是一种特殊的props,就表示一个组件的子元素 */}
{/* 因为我们使用的是继承的方式来写组件,因此,这里得用this.props来获取 */}
<h4>{this.props.children}</h4>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequuntur temporibus libero minima dolorem, rerum nulla similique reprehenderit est et reiciendis possimus delectus atque sint velit quas, laboriosam repellat quos ratione!
</div>
)
}
}
复制代码
components里面还有一个index.js专门管理组件函数
//第一种引入方式
import AwesomeHeader from './AwesomeHeader'
import AwesomeContent from './AwesomeContent'
export {
AwesomeHeader,
AwesomeContent
}
//第二种引入方式
export { default as AwesomeHeader } from './AwesomeHeader'
export { default as AwesomeContent } from './AwesomeContent'
复制代码
接着src中新建一个App.js,在这里面统一import组件ui
//首先引入React和他的Component方法
import React, { Component, Fragment } from 'react';
//赞成引入组件
import {
AwesomeHeader,
AwesomeContent
} from './components'
//并导出App父组件
export default class App extends Component {
render() {
return (
<Fragment>
{/* App是父组件,在调用AwesomeHeader这个组件的时候,AwesomeHeader就是App的子组件, 因此想要传递参数,直接在子组件调用的地方写属性, 属性除了字符串之外,都要用{} */}
{/* AwesomeHeader是一个函数式的组件,因此能够在内部经过props.属性名来访问 */}
<AwesomeHeader
headerText="Niubility React"
logFn={() => {
console.log('从app传过来的方法')
}}
/>
<AwesomeHeader
headerText="Awesome means Niubility"
logFn={() => {
console.log('从app传过来的方法')
}}
/>
<AwesomeContent><div>awesome content 1</div></AwesomeContent>
</Fragment>
)
}
}
复制代码
再将App.js传入index.jsthis
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App'
ReactDOM.render(
<App />,
document.querySelector('#app')
)
复制代码