React入门学习笔记
2018-08-13 本文已影响141人
淡年华Trist
React 基础 组件
1.创建的类需要在别的类中使用,则建立的时候需要添加export default ,另外return里面只能有一个节点,下图就是一个简单的组件

2.使用时以标签的形式使用,并以导包的方式引入进来即可(组件的使用)

3.组件也可以通过参数的方式传递使用

4.同样的,react中也可以使用三目表达式

5.组件中参数传递不在需要单引号,直接{}就可以

5.组件中注释,当使用 “//注释”时html上也会显示这个注释内容,但页面上并不会显示,当使用“{/* 注释 */}”注释时,html和页面都不会显示这个注释。
6.组件的生命周期

componentWillMount():页面将要加载之前会先走这个函数,可以在这个函数里面加载一些页面的数据,以及实现一些逻辑等等。
componentDidMount():页面加载之后会走这个函数。
React属性与事件
1.constructor构造方法:
在一个类中只能有一个名为 “constructor” 的特殊方法。 一个类中出现多次构造函数 (constructor)方法将会抛出一个 SyntaxError 错误。在一个构造方法中可以使用super关键字来调用一个父类的构造方法。如果没有显式指定构造方法,则会添加默认的 constructor 方法。如果不指定一个构造函数(constructor)方法, 则使用一个默认的构造函数(constructor)。

React中使用constructor构造方法更改 state 的时候会立即引起值得变更,但不会刷新整个页面,效率非常的高,而且不会影响其他组件的state的值,只影响本身。state对于模块来说属于自身的属性。

2.React之props属性:组件之间进行传值,对于模块属于外来的属性


3.事件与数据的双向绑定
事件的绑定
点击"提交"按钮之后年龄会由原来20,改为50

当然也可以在绑定的时候传一个值过去,这样点击"提交"按钮之后年龄会由原来的20变为99

子页面向父页面传递参数的方法
在子页面中通过调用父页面传过来的事件 props 进行组件的参数传递,通过onChange获取子页面输入的值,父组件中绑定并接受子组件传过来的值,并更改父组件中的值。
时随着输入框的输入值实时触发 onChange 事件,从而实时更新 p 中的值


4.可复用组件
当父组件给子组件传的值不是一个数字时,则会报错,子组件中添加了一个约束,使子组件只接收所有父组件传过来的数字类型,其他都不接收。


如果number后面加一个 ".isRequired "则父组件引用子组件必须要传这个参数,如果添加上
"BodyIndex.defaultProps = defaultProps; "这个约束,那么当父组件没有传username这个值时则会给他一个默认值,就是上图中的 defaultProps。
如果说父传子属性 子在传子属性 书写方法 "{...this.props} id={4}","...this.props"是拿到所有的参数,"id={4}"是又另外传了一个值过去。
5.组件的refs
当使用ref时,使用 this.refs.submitButton.style.color = 'red' 可以直接更改input中的颜色

Refs 是访问到组件内部 DOM 节点唯一可靠的方法
Refs 会自动摧毁对子组件的引用
不要在 render 或 render 之前对 Refs 进行调用
不要滥用 Refs
React 样式
1.内联样式
其中的header只会影响本类,不会对其他的类进行污染
样式需要使用驼峰写法属性也是需要引起来,如果样式要使用html中的则也需要用引号引起来
注意标签中给他一个class属性需要改为className否则会与react中的class冲突
缺点是动画、伪类(hover)等不能使用

2.内联样式中的表达式
当前 padding-top 和 paddingBottom 的高度为15px,当触发了点击事件之后会给minHeader的值取反,这样他们的值为3px,样式会实时更改,不用刷新页面

3.CSS 模块化
css文件可以以require的方式导入进来,在下面直引用即可
这里可以使用 class 是因为使用了一个插件 "babel-plugin-react-html-attrs"
footer.css只会影响引入的类,不会影响其他的类


React Router 路由
1.Router 基础
首先需要引入路由,并把程序的入口改为<Root/>
其中的 "/" 和 "list" 是平级的,都是一个单独的页面
而其中的 "details" 为嵌套路由,"details"不是一个单独的页面,他会显示在他所嵌套的路由的页面上,而在路由上只要简单的使用this.props.children即可引用子路由


2.参数传递
参数传递时可以通过 "list/123" 写死,也可以通过 "list/:id" 的方式占位,页面url上拼上就可以
而在对应的页面上只需要使用 "this.props.params.id" 就可以接收到url上的值

