组件模块化
来源:互联网 发布:有关网络防沉迷的ppt 编辑:程序博客网 时间:2024/05/21 15:42
回顾新闻点赞案列:
http://blog.csdn.net/github_26672553/article/details/76619122
父子组件
<h2>文章标题:{this.state.news.title}</h2>
我们可以把 新闻标题 部分HTML抽取处理,定义为一个专门的组件。
// 新闻标题组件class Title extends React.Component{ render(){ return <div> <h2>文章标题:{this.props.title}</h2> </div> }}
注意是用this.props.title
获取。
在News
组件里使用这个Title
组件(Title就是子组件):
// 在News组件里 用 <Title title={this.state.news.title}/> // 替换 <h2>文章标题:{this.state.news.title}</h2>
注意在组件的时间传递属性值。
OK,我们发现页面正常显示和为修改之前一样。说明我们的修改没有问题。
全部代码如下:
import React from 'react';import ReactDOM from 'react-dom';import axios from "axios";// 定义新闻组件class News extends React.Component{ // 初始化 constructor(props){ super(props); this.state = { news: {}, // 新闻数据 clickNum:0 // 点赞数 }; } // 组件渲染之前 componentWillMount(){ // ajax请求服务器获取新闻数据 axios.get( "http://localhost/news.php", {params:{newsid:this.props.newsid}} ) .then((res)=>{ //console.log(res.data); this.setState({ news: res.data, // 保存从服务器请求回来的数据 clickNum:res.data.clickNum }) }) } // 渲染到页面 render(){ return <div> <Title title={this.state.news.title}/> <p> <span>创建时间:{this.state.news.created}</span> | 点赞数:<a href="javascript:;" onClick={this.clickNumHandel.bind(this)}>{this.state.clickNum}</a> </p> <p>{this.state.news.desc}</p> </div> } //自定义函数处理 用户点赞动作 clickNumHandel(){ axios.post( "http://localhost/test.php", {params:{newsid:this.props.newsid}} ) .then((res)=>{ console.log(res.data); this.setState({ clickNum:res.data.clickNum // 更新 点赞数 }) }) }}// 新闻标题组件class Title extends React.Component{ render(){ return <div> <h2>文章标题:{this.props.title}</h2> </div> }}// 最后渲染ReactDOM.render( <News newid="101" />, // 使用组件 document.getElementById('root'));
我想你和我一样 看出来了 这个代码有点儿长了
组件模块化(分开到多个文件)
我们把 2个组件抽取处理 title.js
标题组件:
import React from 'react';export default class Title extends React.Component{ render(){ return <div> <h2>文章标题:{this.props.title}</h2> </div> }}
news.js
新闻组件:
// 用到的引入import React from 'react';import axios from "axios";// 引入组件import Title from "./title";export default class News extends React.Component{ // 初始化 constructor(props){ super(props); this.state = { news: {}, // 新闻数据 clickNum:0 // 点赞数 }; } // 组件渲染之前 componentWillMount(){ // ajax请求服务器获取新闻数据 axios.get( "http://localhost/news.php", {params:{newsid:this.props.newsid}} ) .then((res)=>{ //console.log(res.data); this.setState({ news: res.data, // 保存从服务器请求回来的数据 clickNum:res.data.clickNum }) }) } // 渲染到页面 render(){ return <div> <Title title={this.state.news.title}/> <p> <span>创建时间:{this.state.news.created}</span> | 点赞数:<a href="javascript:;" onClick={this.clickNumHandel.bind(this)}>{this.state.clickNum}</a> </p> <p>{this.state.news.desc}</p> </div> } //自定义函数处理 用户点赞动作 clickNumHandel(){ axios.post( "http://localhost/test.php", {params:{newsid:this.props.newsid}} ) .then((res)=>{ console.log(res.data); this.setState({ clickNum:res.data.clickNum // 更新 点赞数 }) }) }}
最后在入口文件index.js
:
import React from 'react';import ReactDOM from 'react-dom';// 引入News组件import News from "./components/news";// 最后渲染ReactDOM.render( <News newid="101" />, // 使用组件 document.getElementById('root'));
入口文件一下子代码量少了很多。
分离完成查看页面没有任何不同。
阅读全文
0 0
- 组件模块化
- 前端组件模块化
- 模块化与组件话
- 组件模块化最佳实践
- CSS样式模块化组件化
- 用Fragment创建模块化组件
- 模块化JavaScript组件开发指南
- 什么是前端组件化,模块化?
- Android组件化、模块化开发
- Android组件化模块化开发
- 前端模块化、组件化开发
- 企业软件为啥不能组件标准化、模块化?
- 前端页面组件化模块化的思考
- 防止过度的模块化/组件化
- Android 开发:由模块化到组件化
- 模块化和组件化的理解
- Android--开发:由模块化到组件化
- 从模块化到组件化再到插件化
- JAVA基础知识总结(二)
- maven
- sklearn文档 — 1.10. 决策树
- C++求值次序与副作用
- ARM GPU 架构简介
- 组件模块化
- 高斯平滑滤波的实现与图像内存之间值的复制
- eclipse常用快捷键
- mask R-cnn检测,分割和特征点定位全部都做了
- CAN总线为什么要有两个120Ω的终端电阻
- mamp 下安装redis扩展
- 最新linux 编程视频教程下载
- 说说使用 JavaScript 解析以及序列化 JSON 的方法
- 基础技术篇 11 —— 一文读懂MQTT协议