react怎么写组件

1.如何写出漂亮的 react 组件

这个是react最新版api,也就是0.14版本做出的改变。

主要是为了使React能在更多的不同环境下更快、更容易构建。于是把react分成了react和react-dom两个部分。

这样就为web版的react和移动端的React Native共享组件铺平了道路。也就是说我们可以跨使用相同的react组件。

新的react包包含了React.createElement,.createClass,ponent,.PropTypes,.children以及其他元素和组件类。这些都是你需要构建组件时助手。

而react-dom包包括ReactDOM.render,.和.findDOMNode。在 react-dom/server ,有ReactDOMServer.renderToString和.renderToStaticMarkup服务器端渲染支持。

总的来说,两者的区别就是:ReactDom是React的一部分。ReactDOM是React和DOM之间的粘合剂,一般用来定义单一的组件,或者结合ReactDOM.findDOMNode()来使用。

更重要的是ReactDOM包已经允许开发者删除React包添加的非必要的代码,并将其移动到一个更合适的存储库。

2.如何科学的组织React组件样式

React的组件式开发,让我们可以利用其Component Model,专注于单个组件的逻辑开发,其中还包括组织组件的样式。

先声明,本文并不是webpack配置教程,不会介绍详细的配置过程,假设你们已经用过了css-loader style-loaderextract-text-webpack-plugin。正在使用的方式我们理想中的文件结构可能会是这样的:- components - modal - modal.jsx - modal.css // 可以是任意预处理器 - dropdown - dropdown.jsx - dropdown.css然而,js现在可以做模块化,css并不行,所有css的定义都可以被视为全局变量,在css被打包后,一个组件的样式有可能会影响到其他组件,于是我们可以通过命名约定(name convention)来曲线救国(这一点并不局限于react开发)。

@modal-prefix: modal;.@{modal-prefix} {}.@{modal-prefix}-title {}类似于上面的使用less的方式,在文件顶部先定义个类的前缀,来尽量避免命名冲突的可能。于是在组件中就可以这样做import React from 'react';import './modal.less';export default React.createClass({ render () { return Hello; }});上面就是我现在在用的方式,利用命名约定做到了伪模块化(其实即便不是在使用react开发项目,也会用类似的方式)。

CSS in JS之前看到过一个ppt:/vjeux/react-css-in-js,谈到了类似的问题。一个方向是把样式也直接写进组件里,即使用inline style。

首先,直接用传统的inline style并不可取,它对属性的支持有限,比如不能用伪类、多个不同浏览器前缀的相同属性、媒体查询、动画等。至于重用样式而言,在react中倒是还行:将需要重用的样式对象作为模块导出即可。

其实大家很努力地希望CSS in JS可以实现,比如:react-stylegithub地址它的局限就是上面提到过的属性支持的问题,没有细究这个东西,不太喜欢。local scoped CSS/css-modules/css-modules/webpack/css-loader#local-scope用这个东西现在是webpack官方支持的,已在css-loader中实现,可以真正让你的css代码作为本地声明,类似的代码:// style.css:local(.title) { background: red; }在需要这份样式的组件里引入这个模块:import styles from 'style.css'首先css的语法中是不支持这个:local()的,我们先看看页面最终的代码:Info到这里应该明白了,其实这也算是个预处理器,它将:local(.title)的类名变成了一个哈希值,仅可以通过模块导入的方式来获取这个哈希值并应用到组件上(生成的类名是可以配置的)。

现在css-loader可以通过添加module选项(详细内容可以参考上面CSS Modules的链接)使得css默认定义的是local scoped的,希望共享的可以用:global()定义。也可以和预处理器混用::global { .global-class-name { color: green; }}目前看下来,它只对class名做哈希,也就是说::local(.title span) // .[hash] span然而:local(.title .name) // .[hash0] .[hash1]这个算是一个有意思的方式,首先它依赖于webpack,而webpack并不局限于React的开发,任何前端项目都可以使用webpack,那么就也都可以使用CSS Modules的概念,不知道这个CSS Modules会有怎么样的发展,感觉可以尝试。

这里是一个使用样例:/css-modules/webpack-demo写在最后的话目前的探索结果暂时是这样,之后可能会继续来填坑。反正现在应该不会去用CSS in JS,CSS Modules可以一试,因为css-loader这个插件基本react的项目里都会使用,写好的组件一个import, 样式和组件都有了,不过仍需实践。

3.react redux怎样写可重用组件

一个网站,从功能上划分,都能整理出一个个细小的组件,比如一个头部,一个按钮,一个banner,那么怎样才能写好一个可以在多个页面共享数据或私有状态的组件呢? 以一个移动端常见的header头部为例,左边是返回按钮,有的还带有文字,中间是标题文字,右边可能有图片或者文字。

返回按钮 标题 返回按钮 返回文字(backText) 标题(title) 图片或文字(icon) 返回点击事件 图片或文字点击事件(handleClick) 背景样式 文字样式 这8个基本因素是所有头部都共用的,有的可有,有的可无,为了保证每个网页都能调用同一个头部组件,又要确保文本和事件还有样式可以自定义。将可变的因素提取出来,通过变量的方式传入组件。

在react中,传递变量用this.props。 const {backText, title, icon, handleClick} = this.propslet _backText = backText || false, _title = title || false, _icon = icon || falsereturn ( {_backText} {_title} ) 在父容器里面调用header组件的用法和安卓上类似,都是通过参数初始化配置。

handleClick(){ //注意,使用context的童鞋,需要定义contextType才可以,不然会报错 this.context.router.go(-1)}render() { return (

)}static contextTypes = { router: React.PropTypes.object.isRequired}; 通过简单的配置,就能构造更多可复用的组件,组件拆的越细,复用的程度就越高,这里没有做传入样式的例子,但是样式的初始化也是类似的方法。 还有常用的组件,如弹框: 标题 中间内容,可以是text或者带有多个标签样式的text 左边按钮,通常叫做取消 右边按钮,通常叫做确认 跟header组件实现一样,首先把可变的数据部分和事件抽象出来。

标题(title) 中间内容(content) 左边按钮文本(leftText) 右边按钮文本(rightText) 左边按钮的点击事件(leftClick) 右边按钮的点击事件(rightClick) render() { const {title, content, leftText, rightText, leftClick, rightClick} = this.props //这里再做一次判断空数据或者为定义数据的处理,没人能保证传递进来的参数一定存在或者一定不为空。 return ( {title} {content} {leftText} {rightText} )} 父容器组件调用弹框组件 leftClick() { //左边按钮事件}rightClick() { //右边按钮事件}render() { const content = 提示语1提示语2 return ( )} 到这里就结束了吗?不是的,我们知道,还有一个东西叫做state,react中,控制弹框的出现和消失,通过state来控制,而我这里要讲的是react和redux结合使用,发送一个dispacth action改变state的状态,使得弹框出现和隐藏。

leftClick() { //左边按钮事件,隐藏弹框,调用一个action函数,该action函数会改变reducer中state的状态 this.props.BombAction(false)}rightClick() { //右边按钮事件,点击跳转到下一个页面的路由 this.context.router.push(`/nextRoute`) //这里还需要做一件事,点击确定后,首先要清除掉弹出框的true状态,恢复成false,避免在其他页面共用该组件的弹出框还没点击出发事件就已经弹出来了。这一步也可以在BombBox组件内部用componentWillUnmount()来触发。

this.props.BombAction(false)}render() { const content = 提示语1提示语2//在叫做global(全局)的reducer定义1个state参数BombStatus,表示弹框的状态,true为显示弹框,false为隐藏弹框。默认是false const {BombStatus} = this.props.global return ( { BombStatus ? : false } )}static contextTypes = { router: React.PropTypes.object.isRequired}; 到这里,一个基本的可复用弹框组件就完成了,在任意一个页面,调用该组件的方法都是一样的,即发送一个action去改变state的状态,然后让弹框组件加载进来。

隐藏也是改变state的状态。 还有很多的例子,比如表格,li列表(常见在分页组件上)等等。

无论是一个简单的组件,还是一个复杂的组件,都要记住一点,先抽象出来可变的内容和事件,然后通过action去控制组件的state状态,不要在组件内部去用setState和getState,前提是你也是用redux来管理state。

组件是个view,要保证组件的纯净,这样服用的程度就会更高。我的原创链接:/p/23776652。

react怎么写组件

转载请注明出处育才学习网 » react怎么写组件

知识

page音标怎么写

阅读(187)

本文主要为您介绍page音标怎么写,内容包括page怎么读英语音标,page怎么读英语音标,英文单词page的音标是什么。元音(20个)单元音/ɑ:/ / ʌ/ / ɔ:/ /ɒ/ /ə/ / ɜ:/ /i:/ /ɪ/ /u:/ /ʊ/ /e/ /æ/双元音

知识

幼儿园教师每日小结怎么写

阅读(242)

本文主要为您介绍幼儿园教师每日小结怎么写,内容包括幼儿园一日工作小结,幼师每日工作小结怎么写,幼儿园课堂小结怎么写,幼儿园幼儿小结怎么写。参考范文:幼儿园教育不同于小学教育,要实现活动目标,单靠几节课、几节活动是难以奏效的,必须贯穿

知识

一目连怎么用

阅读(169)

本文主要为您介绍一目连怎么用,内容包括阴阳师一目连应该怎么使用,阴阳师一目连怎么样,本人新手,抽到了一目连不会用,可以科普一下怎么用么。阴阳师里一目连是一直以来颇受争议的SSR式神,有玩家觉得他没什么用,有的玩家觉得他在斗技中可以得

知识

花多多怎么用

阅读(203)

本文主要为您介绍花多多怎么用,内容包括开花后使用花多多2号会怎样谢谢,新手求问,花多多没啥用啊,花多多肥料多肉怎么用。花多多二号是一种多元素的水溶肥料,促进开花,一般是在植物开始孕蕾时使用直至花谢,这样可以尽可能的保证花草多开花,花朵

知识

过去式用英语怎么说

阅读(270)

本文主要为您介绍过去式用英语怎么说,内容包括说(过去式)英文怎么说,读(过去式)用英语怎么说,过去式用英语怎么写。说(过去式):saidsaid英文发音:[sed]中文释义:v.说;讲;告诉;念;朗诵;背诵;表达,表述(见解)say的过去分词和过去式

知识

试条怎么用

阅读(205)

本文主要为您介绍试条怎么用,内容包括试条的用法,如何用试条,验孕试纸怎么用我要准确步骤..怎么验尿啊。用洁净,干燥的容器收集尿液,要早晨第一次的尿液,早起的尿液一般有最高的HCG值,但很多早孕试纸都没有说明一天中进行测试的最佳时间;持试纸

知识

幼儿园课程管理怎么写

阅读(192)

本文主要为您介绍幼儿园课程管理怎么写,内容包括如何制定和完善幼儿园课程管理制度,如何进行幼儿园教学管理,如何制定和完善幼儿园课程管理制度。幼儿园教学管理中,一定是把尊重孩子放在首位的,因为只有这样才能真正做到爱孩子,如果课堂上碰到

知识

财务半年度总结怎么写

阅读(209)

本文主要为您介绍财务半年度总结怎么写,内容包括财务年终工作总结怎么写,财务怎么写半年度总结和工作计划,财务的上半年总结及下半年的计划怎么写。原发布者:三一文库

知识

初中英语开头怎么写

阅读(226)

本文主要为您介绍初中英语开头怎么写,内容包括初中英语作文万能的开头和结尾,初中英语作文的文章的开头如何写,英语作文开头怎么写。首先提醒你,不同的文章有不同的开头的,不过呢,长点的是吧,很懒惰哦……嘻嘻,给你两端寡人珍藏万金油式的段落,我

知识

三分射手英文怎么写

阅读(262)

本文主要为您介绍三分射手英文怎么写,内容包括篮球用语“三分射手”的英文怎么说,射手座英文简写,三分射手、全能王、扣篮用英语分别该怎么说。三分球英文:three point shot读法:英 [θri: pɔint ʃɔt] 美 [θri pɔɪnt ʃɑt] 例句:Jac

知识

分公司的简介怎么写

阅读(223)

本文主要为您介绍分公司的简介怎么写,内容包括分公司的介绍怎么写,公司简介怎么写,公司简介怎么写。范本:分公司介绍 混凝土机械分公司中联重科混凝土机械公司是中联重科旗下主要事业部之一。主要从事混凝土机械产品的研发、制造和销售。目

知识

康复需求怎么写

阅读(204)

本文主要为您介绍康复需求怎么写,内容包括江苏省残疾儿童基本康复项目审批表申请理出与康复需求该怎么写百,江苏省残疾儿童基本康复项目审批表申请理出与康复需求该怎么写搜,怎么写残疾人康复服务记录。浙江省残疾人康复工程服务记录表姓

知识

大写的不字怎么写

阅读(962)

本文主要为您介绍大写的不字怎么写,内容包括大写的一到十,怎么写啊(中文大写),不字大写怎么写,2的大写有几种写法。中国大写数字是:零(〇)、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、 。生活中,许多地方都有大写数字。

知识

带图作文怎么写

阅读(198)

本文主要为您介绍带图作文怎么写,内容包括写看图的作文怎么写,如何写图表作文,怎样写好看图作文。看图作文也属给材料作文的一种,只不过给的材料不是文字,而是图画。完成这一类作文, 首先要看懂图画,搞清题意的要求。要分析画面的主体是什么

知识

怎么写com组件

阅读(184)

本文主要为您介绍怎么写com组件,内容包括如何使用java写COM组件,如何开启com组件,DELPHI怎样编写COM组件。COM component(COM组件) COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在C

知识

reactid怎么写

阅读(245)

本文主要为您介绍reactid怎么写,内容包括react帮助中心页面怎么写,用react如何写一个最简单的列表,Gmarket的ID怎么写。react to1.对…作出反应2.对…起反应3.起反应4.对……反应react (to)1.起反应react to respond t

知识

vue.js组件怎么写

阅读(189)

本文主要为您介绍vue.js组件怎么写,内容包括前端面试,被问到vue的组件是怎么写,我怎么回答,如何正确使用Vue.js的组件,如何正确使用Vue.js的组件。定义一个组件// title.vue{{title.title}}<script>export default {props: {tit

知识

vue组件怎么写

阅读(184)

本文主要为您介绍vue组件怎么写,内容包括前端面试,被问到vue的组件是怎么写,我怎么回答,vue怎么在组件里写methods,vue动态组件子组件之间怎么传值。作用域:它是指对某一变量和方法具有访问权限的代码空间,在JS中,作用域是在函数中维护的。表

知识

怎么写组件

阅读(163)

本文主要为您介绍怎么写组件,内容包括前端面试,被问到vue的组件是怎么写,我怎么回答,动态创建组件,怎么写他的事件呢,易语言动态创建组件怎么给创建的组件写代码。一般把Control翻译成控件,把Component翻译成组件。控件就是具有用户界面的组

知识

组件怎么写

阅读(156)

本文主要为您介绍组件怎么写,内容包括“借用”怎么翻译如:弹簧下座组件借用这里的“组件”“借用,动态创建组件,怎么写他的事件呢,前端面试,被问到vue的组件是怎么写,我怎么回答。这是一个HTML标签,即select和option。然后在给select加上一个

知识

三星手机天气小组件被禁用当前城市怎么办

阅读(270)

查看天气情况:1.添加天气小组件:待机桌面点住空白位置不松手,屏幕下方选择小组件,滑动屏幕选择天气小组件,点住拖动到主屏幕;2.添加城市:添加天气小组件后,在主页面上点击天气小组件,在出现的页面上点击加号,即可搜索添加城市;3.也可下载安装第三方

知识

QQ安全组件异常是怎么回事

阅读(280)

原因如下:1.可能是计算机感染了木马病毒;2.可能是某些安全类软件误删除了QQ安全组件导致。解决方法如下:1.使用专业杀毒软件彻底查杀木马并修复系统漏洞;2.在确认安全的环境下,重新下载安装QQ;3.修改QQ密码。

[/e:loop]