目录
React环境搭建 (一步一步走)
React 基本配置
redux基本使用
react-router4
首页 web前端 js教程 React+mongodb的使用与配置

React+mongodb的使用与配置

Jul 13, 2018 pm 04:58 PM
mongodb node.js react.js redux

这篇文章主要介绍了关于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. 下面是我的安装过程

41093614-5b46bba86de34_articlex[1].png

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

2116975101-5b46bc2286837_articlex[1].png

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

2091548278-5b46bd7048f7f_articlex[1].png

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

735270793-5b46bf489b503_articlex[1].png

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方便一点
登录后复制

2169363067-5b4846bd4f8a4_articlex[1].png

        (调试react  推荐谷歌插件 Redux DevTools) 在谷歌商店下载需要翻墙
登录后复制

react-router4

1302327887-5b484843043d3_articlex[1].png

 *注意点*: 下载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=&#39;/about/:id&#39; 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的使用与配置的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

navicat过期怎么办 navicat过期怎么办 Apr 23, 2024 pm 12:12 PM

解决 Navicat 过期问题的方法包括:续订许可证;卸载并重新安装;禁用自动更新;使用 Navicat Premium Essentials 免费版;联系 Navicat 客户支持。

前端学nodejs难吗 前端学nodejs难吗 Apr 21, 2024 am 04:57 AM

对于前端开发人员而言,学习 Node.js 的难度取决于其 JavaScript 基础、服务器端编程经验、命令行熟悉度和学习风格。学习过程包括入门级和进阶级的模块,重点关注基础概念、服务器端架构、数据库集成和异步编程。总体而言,对于具备扎实 JavaScript 基础并愿意投入时间和精力的开发人员,学习 Node.js 并不困难,但对于缺乏相关经验的人来说,可能需要克服一定的挑战。

navicat怎么连mongodb navicat怎么连mongodb Apr 24, 2024 am 11:27 AM

要使用 Navicat 连接 MongoDB,您需要:安装 Navicat创建 MongoDB 连接:a. 输入连接名称、主机地址和端口b. 输入认证信息(如果需要)添加 SSL 证书(如果需要)验证连接保存连接

Golang 和 Node.js 在后端开发中的对比 Golang 和 Node.js 在后端开发中的对比 Jun 03, 2024 pm 02:31 PM

Go和Node.js在类型化(强/弱)、并发(goroutine/事件循环)、垃圾收集(自动/手动)上存在差异。Go具备高吞吐量、低延迟,适用于高负载后端;Node.js擅长异步I/O,适合高并发、短请求。两者的实战案例包括Kubernetes(Go)、数据库连接(Node.js)、Web应用程序(Go/Node.js)。最终选择取决于应用程序需求、团队技能和个人偏好。

nodejs用什么数据库好 nodejs用什么数据库好 Apr 21, 2024 am 05:06 AM

对于 Node.js 应用,选择数据库取决于应用要求。NoSQL 数据库 MongoDB 提供灵活性,Redis 提供高并发性,Cassandra 处理时间序列数据,Elasticsearch 专用于搜索。SQL 数据库 MySQL 性能出色,PostgreSQL 功能丰富,SQLite 轻量级,Oracle Database 全面。选择时,需考虑数据类型、查询、性能、事务性、可用性、许可和成本。

nodejs如何实现数据库 nodejs如何实现数据库 Apr 21, 2024 am 05:42 AM

在 Node.js 中连接数据库需要选择一个数据库系统(关系型或非关系型),然后使用特定于该类型的模块建立连接。常见模块包括 mysql(MySQL)、pg(PostgreSQL)、mongodb(MongoDB)和 redis(Redis)。建立连接后,可以使用查询语句检索数据并使用更新语句修改数据。最后,完成所有操作后必须关闭连接以释放资源。遵循这些最佳实践可提高性能和安全性,例如使用连接池、参数化查询和妥善处理错误。

nodejs怎么连接数据库 nodejs怎么连接数据库 Apr 21, 2024 am 05:07 AM

在 Node.js 中连接数据库的步骤:安装 MySQL、MongoDB 或 PostgreSQL 包。创建数据库连接对象。打开数据库连接,并处理连接错误。

net4.0有什么用 net4.0有什么用 May 10, 2024 am 01:09 AM

.NET 4.0 用于创建各种应用程序,它为应用程序开发人员提供了丰富的功能,包括:面向对象编程、灵活性、强大的架构、云计算集成、性能优化、广泛的库、安全性、可扩展性、数据访问和移动开发支持。

See all articles