浅谈react之入门

242 阅读6分钟

一个框架第一步都是安装,下面先说说是怎么安装的吧!

如何安装react脚手架 以下流程一次安装

① 创建项目 create-react-app my-react(项目的文件名)

② 进入项目 cd my-react

③ npm i redux -s 安装redux (Redux 是 JavaScript 状态容器, 提供可预测化的状态管理。相当于vue的vuex状态管理)

④ npm i react-redux -s 安装redux

    React Component 是页面上的组件 (借书的用户)
    Store 是存储数据的公共区域(相当于图书馆的管理员)
    Action Creators 数据传递的过程(当在图书馆借书的时候说的话做的事)
    Reducers 记录本 (还书和借书的地方)
    Npm I redux-thunk -s 安装中间件 将需要修改的state都存入到store里,发起一个action用来描述发生了什么,用reducers描述action如何改变state tree 。创建store的时候需要传入reducer,真正能改变store中数据的是store.dispatch API。

⑤ npm i react-router-dom -s 安装react路由

⑥ npm i axios -s 安装axios

⑦ npm i antd -s 安装antd 这个是react框架修改配置环境,以适应antd

⑧ npm i react-app-rewired -D 安装

修改package.json的启动配置

      "scripts": {
        "start": "react-app-rewired start",
        "build": "react-app-rewired build",
        "test": "react-app-rewired test --env=jsdom",
        "eject": "react-scripts eject"
      },

⑨安装 npm I babel-plugin-import -D

跟目录创建一个config-overrides.js文件

    const { injectBabelPlugin } = require('react-app-rewired');
     module.exports = function override(config, env) 
     { 
         config = injectBabelPlugin(['import', { 
         libraryName: 'antd', 
         libraryDirectory: 'es', style: 'css'
         }], config);
          return config; 
        };

接下来就可以创建组件了

Src =>创建一个view (文件夹名称自由取名称,最好就是按照自己项目的页面去取名,方便查找修改eg:home book )

分别里面要写几个部分就建几个js文件

例如:index.js publicList.js

每个页面必须要写上的代码是:

    import React, {Component} from "react";
    class Index(注意这个是哪个文件名就引入哪个文件名) extends Component {
    render(){ // 相当于vue中的data
    // 这里就是要写内容
    return  …
        }
    }
    
    export default Index; // 注册组件

在src里面建立一个路由 router 文件夹,里面创建js文件,需要配置路由

    // 相当于vue的router.js去配置路由
    // 引入react  
    import React, {Component} from 'react';
    // 引入配置路由
    import {Switch,Route,Redirect} from 'react-router-dom';
    
    // 引入各个组件
    import Index from '../view/index/index'
    import About from '../view/about/index'
    // 在这里注册
    class RouterIndex extends Component{
        render () {
           return (
               <Switch>
                   {/* 重定向index   exact是严格匹配*/}
                   <Route path="/" exact render={ () => (
                       <Redirect to="/" />
                   )}/>
                   {/* 注册每一个组件的导向路由 */}
                  <Route path="/index" component={Index}/>
                  <Route path="/book" component={Book}/>
               </Switch>
           )
        }
    }
    // 这里是导出
    export default RouterIndex

配置完路由,在app.js引入我们配置的名字即可

    import React, { Component } from 'react';
    // 配置理由的名称
    import RouterIndex from "./router/index";
    class App extends Component {
      render() {
        return (
          // 在return里面注册,就可显示不同的页面内容
          <RouterIndex/>
        )
      }
    }
    export default App;

在src的index.js直接可以引入

    import React from 'react';
    import ReactDOM from 'react-dom';
    import App from './App';
    import registerServiceWorker from './registerServiceWorker';
    import {HashRouter} from "react-router-dom"; // HashRouter是#/
    import {BrowserRouter} from "react-router-dom";
    const store = createStore(reducer,applyMiddleware(thunk));
    ReactDOM.render(
            <BrowserRouter>
               <App />
            </BrowserRouter>
        , document.getElementById('root'));
    registerServiceWorker();

搭建完了就细说一下react的细节吧

  1. ReactDOM.render(要渲染的内容,放置内容的容器)

    ReactDOM:React框架提供的一个对象容器不能使body

  2. 允许在js中书写xml

    xml中可以包含子元素,但是结构中只能有且仅有一个顶级元素

    支持插值表达式

    插值表达式:类似ES6中模板字符串 ${表达式}

    插值表达式语法:{表达式}

    <div>
        <h1>Hello React!</h1>
        <h1>Hello React!</h1>
        <h1>{'小可爱'+'与狗'}</h1>
    </div>
    

3.插值表达式

在xml中插入一个表达式(得到一个结果:值)字符串 数字

下面三种类型的值输出空字符(不会报错)布尔值 空 未定义

插值表达式中不能直接输出对象 对象

但是,如果是一个数组对象则是可以的,需要注意的是,React对数组进行转字符作,并且是使用空字符串进行连接:arr.join('')

 <div>
    <h1>Hello React!</h1>
    <h1>Hello React!</h1>
    <h1>{'Hello'}</h1>
    <h1>{1}</h1>
    <h1>{true}</h1>
    <h1>{null}</h1>
    <h1>{undefined}</h1>
    {/*<h1>{ {left: 100} }</h1>*/}
    { [1,2,3] }
</div>

4.jsx属性

Jsx标签也是可以支持属性设置的

基本使用和html/XML类型,在标签上添加属性名 = 属性值,值必须使用””包含 这只是可以直接差值表达式的

注意:

① class:使用className属性来代替

② style:值必须使用对象

      var a = 'content'; // 声明一个变量
        ReactDOM.render(
            <div>
                <h1 id="a">Hello React!</h1>
                <h1 id={a}>Hello React!</h1>
                <h1 className="box">Hello React!</h1>
                <h1 style={ {color: 'red'} }>Hello React!</h1>
            </div>,
         document.getElementById('app')
        ); 

5..react 没有模板语法,插值表达式中只支持表达式,不支持语句:for,if

    var users = ['刘伟','莫涛','钟毅'];
    var obj = {left: 100, top: 200};

根据数组中的内容生成一个包含结构的新数组

通过数组生成的结构,每一个元素包含有一个key属性,同时这个key属性的值必须是唯一的 对象跟数组的方法不一样

    ReactDOM.render(
                <div>
                    <ul>
                         {
    			   // 数组的调用方式
                            users.map( (user, index) => {
                                return <li key={index}>{user}</li> // key是默认的
                            } )
                        }
                    </ul>
                    <ul>
                        {
                            // 对象的调用方式(循坏obj对象)
                            /*['left', 'top']*/
                            Object.keys(obj).map( key => {
                                return <li key={key}>{key} - {obj[key]}</li>
                            } )
                        }
                    </ul>
                </div>,
                document.getElementById('app')
            );

6.函数复用

组件:拥有独立功能的一个模块

React还提供组件的另外一种使用的方式:标签化

标签化:传参,通过标签属性传入的

    var users = ['刘伟','莫涛','钟毅'];
    var users2 = ['张三','李四','王五'];
     function List(props) {
      // 使用porps方法去获取数据,然后根据不同的变量名去调用
                return props.data.map( ( item, index ) => {
                    return <li key={index}>{item}</li>
                } )
            }

    ReactDOM.render(
        <div>
            <ul>
                {/*List(users)*/}
                <List data={users} a="1" />
            </ul>

            <ul>
                {/*List(users2)*/}
                <List data={users2} />
            </ul>
        </div>,
        document.getElementById('app')
    );

7.如果一个函数或类作为一个组件去使用的话,那么名称必须首字母大写

如果使用类实现组件,那么必须继承一个父类:React.Compoment

组件类必须实现一个render()的方法

Props:传入的参数必须是用对象下的一个属性props来接收

       var users = ['刘伟','莫涛','钟毅'];
       var users2 = ['张三','李四','王五'];
         class List extends React.Component {
            render() {
                return this.props.data.map( (item, index) => {
                    return <li key={index}>{item}</li>
                } )
            }
        }
         ReactDOM.render(
                <div>
                    <ul>
                        <List data={users} />
                    </ul>
    
                    <ul>
                        <List data={users2} />
                    </ul>
                </div>,
                document.getElementById('app')
            );

以上就是我对react小小总结,大家一起共同学习。~~