欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

React+mongodb的使用与配置

程序员文章站 2022-03-18 14:23:24
...
这篇文章主要介绍了关于React+mongodb的使用与配置,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

React环境搭建 (一步一步走)

React 基本配置

(React 是一个用于构建用户界面的 JAVASCRIPT 库。React主要用于构建UI,很多人认为 React
是 MVC 中的 V(视图)。)

  • 虽然网上有很多教程(但是自己搭建会遇到一些坑 所以自己去解决 从中体会到自己的不足)

  1. npm install -g create-react-app 全局安装

  2. create-react-app react_mongodb (这个我的项目名)

  3. 下面是我的安装过程

React+mongodb的使用与配置

4.进入项目 npm start 看到以下效果 说明项目已经搭建成功了

React+mongodb的使用与配置

5.给大家分析一下目录结构 易懂

React+mongodb的使用与配置

6.打开webpack配置(npm run eject) 或者自己配置
运行命令后看到以下目录

React+mongodb的使用与配置

redux基本使用

  1. 带领大家入门 redux

    1> 首先下载 npm i redux --save
    2> 当我们看过redux的例子过后 现在我们把代码拆分

    3> 同步异步介绍 (react处理异步需要 redux-thunk插件)

       * redux.js
             const ADD = '嘻嘻'
             const REMOVE = '呵呵'
             
             // reducer
             export function counter(state = 0, action) {
                 switch (action.type) {
                     case ADD:
                         return state + 1;
                     case REMOVE:
                         return state - 1;
                     default:
                         return 10;
                 }
             }
             
             // action creator
             export function addgun() {
                 return { type: ADD }
             }
             
             export function removegun() {
                 return { type: REMOVE }
             }
             
             // 异步函数操作
             export function addgunAsync() {
                 return dispatch => { // dispatch参数
                     setTimeout(() => {
                         dispatch(addgun())
                     }, 2000)
                 }
             }
         
         
       * 在index.js中引入
             import React from 'react';
             import ReactDOM from 'react-dom';
             import { createStore, applyMiddleware } from 'redux'; // applyMiddleware 处理中间键
             import thunk from 'redux-thunk';  // 中间键
             import registerServiceWorker from './registerServiceWorker';
             import App from './App';
             
             import { counter, addgun, removegun, addgunAsync } from './redux';
             
             // 创建一个store counter执行reducer方法
             const store = createStore(counter, applyMiddleware(thunk))
             // const store = createStore(counter)
             
             function render() {
                 ReactDOM.render(<App store={store} addgun={addgun} removegun={removegun} addgunAsync={addgunAsync} />, document.getElementById('root'));
             }
             render()
             
             // 更新后重新渲染
             store.subscribe(render)
             // ReactDOM.render(<App />, document.getElementById('root'));
             registerServiceWorker();
    
       * App.js 组件
           import React, { Component } from 'react';
    
             export default class App extends Component {
                 render() {
                     const store = this.props.store
                     const num = store.getState()
             
                     // 由父组件中传入
                     const addgun = this.props.addgun
                     const removegun = this.props.removegun
                     const addgunAsync = this.props.addgunAsync
                     return (
                         <p>
                             <h1>
                                 hello
                                 <br />
                                 {num}
                             </h1>
                             <button onClick={()=> store.dispatch(addgun())}>加一</button>
                             <button onClick={()=> store.dispatch(removegun())}>减一</button>
                             <button onClick={()=> store.dispatch(addgunAsync())}>异步添加</button>
                         </p>
                     )
                 }
             }
    
     * 这里你可以打开浏览器查看效果
  2. react-redux使用 安装npm i react-redux -S(是--save的简写)

      Provider 组件应用在最外层, 传入store,只调用一次
      connect 负责从外部获取组件需要的参数
      connect 可以用装饰器的方式来写
    
      & 下面是修改过的代码: 依然使用redux.js
      
        修改了**App.js index.js**
        
            index.js
                 import React from 'react';
                 import ReactDOM from 'react-dom';
                 import { createStore, applyMiddleware, compose } from 'redux'; // applyMiddleware 处理中间键
                 import thunk from 'redux-thunk';  // 中间键
                 import { Provider } from 'react-redux';
                 import registerServiceWorker from './registerServiceWorker';
                 import App from './App';
                 
                 import { counter } from './redux';
                 
                 // 创建一个store counter执行reducer方法
                 const store = createStore(counter, compose(
                     applyMiddleware(thunk),
                     window.devToolsExtension ? window.devToolsExtension() : f => f
                 ))
                 
                 ReactDOM.render(
                     <Provider store={store}>
                         <App />
                     </Provider>,
                     document.getElementById('root'));
                 registerServiceWorker();
           App.js 组件
                import React, { Component } from 'react';
                // 连接使用
                import { connect } from 'react-redux';
                import { addgun, removegun, addgunAsync } from './redux/index.redux';
                class App extends Component {
                    render() {
                        return (
                            <p>
                                <h1>
                                    hello
                                    <br />
                                    {this.props.num}
                                </h1>
                                <button onClick={this.props.addgun}>加一</button>
                                <button onClick={this.props.removegun}>减一</button>
                                <button onClick={this.props.addgunAsync}>异步添加</button>
                            </p>
                        )
                    }
                }
                
                const mapStatetoProps = (state)=> {
                    return { num: state }
                }
                const actionCreators = { addgun, removegun, addgunAsync }
                // 装饰器的使用 connect  链接过后可以用  this.props 获取
                App = connect(mapStatetoProps, actionCreators)(App)
                export default App;
  
        ** 这里是不是感觉比store.subscribe方便一点

React+mongodb的使用与配置

        (调试react  推荐谷歌插件 Redux DevTools) 在谷歌商店下载需要*

react-router4

React+mongodb的使用与配置

 *注意点*: 下载router包   npm i react-router-dom --save
             react-router-dom 也有2个路由参数  
                 HashRouter(带#路由)
                 BrowserRouter (不带#号) 如果使用这种路由 和Vue一样需要后台配置
    
    下面提供代码 供朋友参考:
        import React from 'react';
        import ReactDOM from 'react-dom';
        import registerServiceWorker from './registerServiceWorker';
        import { createStore, applyMiddleware, compose } from 'redux'; // applyMiddleware 处理中间键
        import thunk from 'redux-thunk';  // 中间键
        import { Provider } from 'react-redux';
        import { BrowserRouter, Route, Link, Redirect, Switch } from 'react-router-dom';
        import App from './App';
        
        import { counter } from './redux/index.redux';
        
        // 创建一个store counter执行reducer方法
        const store = createStore(counter, compose(
            applyMiddleware(thunk),
            window.devToolsExtension ? window.devToolsExtension() : f => f
        ))
        
        class about extends React.Component {
            render () {
                return (
                    <h1>关于详情: {this.props.match.params.id}</h1>
                )
            }
        }
        
        function home() {
            return <h1>我的详情</h1>
        }
        
        ReactDOM.render(
            (
                <Provider store={store}>
                    <BrowserRouter>
                        <p>
                            <ul>
                                <li>
                                    <Link to="/">嘻嘻嘻</Link>
                                </li>
                                <li>
                                    <Link to="/about">关于</Link>
                                </li>
                                <li>
                                    <Link to="/home">我的</Link>
                                </li>
                            </ul>
                            <Switch>
                                {/* {Switch} 默认只会匹配第一个 */}
                                <Route path="/" exact component={App}></Route>
                                <Route exact path='/about/:id' component={about} />
                                {/* match.params.id 取值 */}
                                <Route path="/home" component={home}></Route>
                            </Switch>
                        </p>
                    </BrowserRouter>
                    {/* <App /> */}
                </Provider>
            ),
            document.getElementById('root'));
            registerServiceWorker();
            
       *

react-router4与其他版本跳转不一致

       
     如果使用一下跳转方式 会包错 push
     this.props.history.push('/about')
           
          在4.x 中提供了一个高阶组件  withRouter
          
          import { withRouter } from "react-router-dom";

          eg: 以下事例
          
            import React, { Component } from 'react';
            import { withRouter } from "react-router-dom";
            
            class Info extends Component {
                handleClick() {
                    this.props.history.push('/about')
                }
                render() {
                    return (
                        <button onClick={() => this.handleClick()}>加一</button>
                    )
                }
            }
            
            export default withRouter(Info);
          
          
          后续更新全部!!!!

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

react-router路由的简单分析

以上就是React+mongodb的使用与配置的详细内容,更多请关注其它相关文章!