1.react 和jq的区别?
reactjs 是个mvc的组件化框架,jquery 只是个函数库。
2.为什么要用react 写项目?
单页面应用 运行速度快
3.React 语法基于jsx 、 javascript xml (nodejs里面的模板ejs)
jsx怎么理解? javascript xml 混合写
ReactDOM.render(
<div>
<h2>你和React</h2>
<ul>
<li>列表1</li>
<li>列表1</li> {/**/}
<li>列表1</li>
</ul>
</div>
,
document.getElementById(‘box’)
)
4. 模板里面渲染数据 {}
5.定义数据
es5
getInitialState:function(){
return{
msg:'这是InitialState里面的数据',
name:'张三',
list:''
}
}
用这里的数据: this.state.数据名称
es6
constructor(props){
super(props);
this.state={
msg:'这是Life的msg',
name:'张三',
list:''
}
}
用这里的数据:this.state.数据名称
6.定义模板
render(){
return(
<div>
<h2>这是一个内容组件-{this.state.msg}--{this.state.name}</h2>
</div>
)
}
6.定义组件
es5
var Header=React.createClass({
getInitialState:function(){
return{
msg:'这是InitialState里面的数据',
name:'张三',
list:''
}
},
render(){
return (
<div></div>
)
}
})
es6
class Header extends React.Component{
constructor(props){
super(props);
//数据
this.state={
msg:'这是一个头部组件'
}
this.run=this.run.bind(this);
}
run(){
}
render(){
return (
<div></div>
)
}
}
暴露:
export default Header;
其他地方引入:
import Header from './Header.js'; //引入 js
7.模板里面执行方式
onClick 注意大小写 注意不要写引号 不要写()
onClick={this.run}
onChange
传值:
onClick={this.run.bind(this,'传递的数据')}
8.获取数据 以及更改数据
获取
this.state.数据
更改
this.setState({
msg:'更改后的数据'
})
9.input 框 onChange事件会传递一个事件对象
<input onChange={this.方法} />
console.log(e);
方法(){
e.target.value
}
10.ref 获取dom节点
给元素加ref属性 比如: <div ref='home'></div>
this.refs.home 获取dom节点
11. 给模板里面的元素加属性
注意:
className 设置class
htmlFor 设置for
style="对象"
<div>
<label htmlFor="user">用户名: </label>
<input type="text" id="user" placeholder="用户名" />
</div>
其他的以前怎么写还是怎么写 id
12.父子组件传值
1.父组件给子组件传值,子组件获取父组件的数据和方法
1.父组件 调用子组件的时候传值
<Header msg='这是一个数据' h={this} />
2.子组件获取父亲组件的数据
this.props.msg
2.子组件给父组件传值 ,父组件获取子组件的数据和方法
1.父组件调用子组件的时候定义ref
<Header ref='header' />
2.this.refs.header拿到了子组件的对象。可以获取子组件的数据和方法
13.父子给组件传值的时候 propTypes defaultProps
子组件里面通过 propTypes 可以验证父组件传递数据的合法性
defaultProps 父组件不给子组件传值的时候的默认值
Header.propTypes = {
text: PropTypes.string /*指定 text是字符串类型*/
};
//不传值的时候 给props一个默认值
Header.defaultProps = {
username: '张三'
};
14.生命周期函数
生命周期函数:
组件加载之前 加载完成 更新数据 销毁组件触发的一系列的方法就是生命周期函数
componentWillMount
componentDidMount
https://facebook.github.io/react/docs/react-component.html
15.axios请求数据
https://github.com/mzabriskie/axios
1.安装
2.引入
3.使用
//1.cnpm install axios --save
//2.import axios from 'axios';
//3.看官方文档使用
16.创建单文件组件
https://facebook.github.io/react/docs/installation.html
1.安装脚手架 ( 项目生成工具) 只需要安装一次
npm install -g create-react-app / cnpm install -g create-react-app
2.创建项目 (可以创建)
create-react-app 项目名称
cd 项目名称
npm start 运行项目
例如:
create-react-app reactdemo01
cd reactdemo01
npm start 执行项目
3.运行 打开项目
npm start
4.正式打包
npm run build
17.路由配置 坑 (老版本)
1.安装react-router
注意要指定版本安装
npm info react-router 查看路由的版本
cnpm install react-router@2.8.1 老版本的稳定版本
2.引入import { Router, Route, Link } from 'react-router'
(index.js App.js)
3.定义组件 首页 Home组件 新闻 News组件
4.配置路由 ( index.js)
/ 加载APP组件
/home 加载Home组件
/news 加载News组件
ReactDOM.render((
<Router>
<Route path="/" component={App}>
<Route path="home" component={Home} />
<Route path="news" component={Inbox}>
</Route>
<Route path="newscontent/:aid" component={NewsContent}>
</Route>
</Route>
</Router>
), document.body)
5.配置 加载的组件 的显示的地方 (App.js)
{this.props.children}
6.页面跳转 (组件的跳转) (任何的组件里面都可以写)
<ul>
<li><Link to="/about">About</Link></li>
<li><Link to="/inbox">Inbox</Link></li>
</ul>
7.Link动态传值
<li><Link to={'/newscontent/'+aid}>新闻详情</Link></li>
<Link to={{pathname:'newscontent/'+this.state.aid,query:{name:'zhangsan'}}}>跳转新闻详情</Link>
8.获取动态传值
{this.props.params.aid}
18.模板上面解析html
https://facebook.github.io/react/docs/dom-elements.html
function createMarkup() {
return {__html: '<h2>这是一个h2</h2>'};
}
render(){
return (
<div>
<div dangerouslySetInnerHTML={this.createMarkup()} />;
</div>
)
}
19.父子路由、路由的嵌套
嵌套路由
1.父路由下面配置子路由
<Route path="add" component={NewsAdd} />
<Route path="list" component={NewsList} />
</Route>
2.父组件里面的模板上面加上
{this.props.children} 来显示子路由
*/
import Home from ‘./components/Home.js’;
import Welcome from ‘./components/Welcome.js’;
import News from ‘./components/News.js’;
import NewsList from ‘./components/NewsList.js’;
import NewsAdd from ‘./components/NewsAdd.js’;
ReactDOM.render(
<Router history={browserHistory}>
<Route path="/" component={App}>
<IndexRedirect to="/home/welcome" />
<Route path="home" component={Home}>
<IndexRoute component={Welcome}/>
<Route path="welcome" component={Welcome} />
</Route>
<Route path="news" component={News}>
<Route path="add" component={NewsAdd} />
<Route path="list" component={NewsList} />
</Route>
</Route>
</Router>,
点击加class
<ul>
<li><Link to="/home" activeClassName="active" onlyActiveOnIndex={true} >首页</Link></li>
<li><Link to="/news" activeClassName="active" >新闻</Link></li>
</ul>
onlyActiveOnIndex={true} 如果加上这个数据 路由和设置的路由完全相等的情况选中
20.js跳转路由。
browserHistory.push('home');
21.swiper的使用
1.cnpm install swiper --save
2、import Swiper from 'swiper';
3.引入swiper.css
4.自己改变元素的高度
5.componentDidMount实例化Swiper
componentDidMount(){
//DOM操作
var mySwiper = new Swiper('.swiper-container', {
autoplay: 5000,//可选选项,自动滑动
})
}
22.ant desigin react的UI框架
官网https://ant.design/index-cn
1.安装
cnpm install antd --save
2.引入
import { Button } from 'antd';
3.引入css
1.新建一个自己的css
2.在自己的css中引入 antd的css
@import '~antd/dist/antd.css';
4.看文档使用
报错怎么办?
提取里面的antd.css ,自己引入
23.导航选中。
<ul>
<li><Link to="/home" activeClassName="active" onlyActiveOnIndex={true} >首页</Link></li>
<li><Link to="/news" activeClassName="active" >新闻</Link></li>
</ul>
onlyActiveOnIndex={true} 如果加上这个数据 路由和设置的路由完全相等的情况选中