react的移动端项目

实现效果
在这里插入图片描述

1.安装和初始化
$ npm install -g create-react-app

# 注意:工具会自动初始化一个脚手架并安装 React 项目的各种必要依赖,如果在过程中出现网络问题,请尝试配置代理或使用其他 npm registry。
$ create-react-app my-app

$ cd my-app
$ npm start
2.安装有关插件
1.安装sass
 npm install sass --D
 2, 安装  redux router
 npm install redux react-redux react-router-dom redux-thunk --save
3.创建文件夹

1) src-pages 存储页面
2)components 公共组件
3)layout 模板

4. layout —>Layout.js 模板
import React from 'react'
import BottomNav from "./components/BottomNav"
 const Layout=(props)=> {
    //  console.log(props,'props===================')
    const  {children}=props;
    return (
        <div>
          {children}
            <BottomNav></BottomNav>
        </div>
    )
}
export default Layout

```js
在home等页面最外层包围Layout
	```js
	import React from 'react'
import Layout from "../../layout/Layout"
export default function Home() {
    return (
        <Layout>
            home页面
        </Layout>
    )
}
5.最下面导航栏的封装layout—>components–>BottomNav—>index.js

Icon 要在App文件导入

import React from 'react'
import "./index.scss"
const menu = [
    {
      title: '首页',
      icon: 'shouye',
      link: '/',
    },
    {
      title: '分类',
      icon: 'fenlei',
      link: '/search',
    },
    {
      title: '发现',
      icon: 'wode',
      link: '/user',
    },
    {
        title: '我的',
        icon: 'wode',
        link: '/user',
      }
  ]
 const BottomNav=(props)=> {
    return (
        <ul className="bottomNav">
            {menu.map((item)=>{
                return (
                    <MenuItem key={item.title} {...item}/>
                )
            })}
        </ul>
    )
}
export default BottomNav
function MenuItem(props){
    return (
        <li>
            <span className={"iconfont icon-"+props.icon}></span>
            <a href={props.link}>{props.title}</a>
        </li>
    )
}

5.rem 适配 App文件导入

src同级:lib–>flexible.js

6. 路由

pages同级Router–index.js

import React from 'react'
import { BrowserRouter, Route, Switch } from "react-router-dom";

function Router(props) {
  return (
    <Switch>
      <Route exact path="/" component={Home}></Route>
      <Route path="/find" component={Find}></Route>
      <Route path="/sort" component={Sort}></Route>
      <Route path="/my" component={My}></Route>
      <Route component={_404}></Route>
    </Switch >
  )
}
export default Router

》App引入Router文件

import React from 'react';
import { BrowserRouter } from "react-router-dom";
import './App.css';
// import Home from "./pages/Home"
import "./static/iconfont/iconfont.css" 
import './lib/flexible'
import Router from './Router';
function App() {
  return (
    <BrowserRouter> 
      <Router />
    </BrowserRouter>
   
  );
}

export default App;

》此时的页面样式
在这里插入图片描述

7. Layout–>BottomNav–>index.js
	import React from 'react'
import "./index.scss"
import {Link} from "react-router-dom"
const menu = [
    {
      title: '首页',
      icon: 'shouye',
      link: '/',
    },
    {
      title: '分类',
      icon: 'fenlei',
      link: '/sort',
    },
    {
      title: '发现',
      icon: 'wode',
      link: '/find',
    },
    {
        title: '我的',
        icon: 'wode',
        link: '/my',
      }
  ]
 const BottomNav=(props)=> {
    return (
        <ul className="bottomNav">
            {menu.map((item)=>{
                return (
                    <MenuItem key={item.title} {...item}/>
                )
            })}
        </ul>
    )
}
export default BottomNav
function MenuItem(props){
    return (
        <li>
            <span className={"iconfont icon-"+props.icon}></span>
            <Link to={props.link}>{props.title}</Link>
        </li>
    )
}`

》此时可以实现切换导航到切换对应页面

8. 路由守卫,没有登录,不能进入首页

在Router–>建一个PrivateRoute.js

import React, { Component } from 'react'
import { Route, Redirect } from "react-router-dom";
import {connect} from "react-redux"
class PrivateRoute extends Component {
  render() {
    const { isLogin,path,component,location } = this.props
    if(isLogin){
      // 登录
      return  <Route path={path} component={component} />
    }
    return (
      // 没有登录
      <Redirect to={{
        pathname: '/login',
        state:{redirect:location.pathname}
      }} />    
    )
  }
}
// 参数
const mapStateToProps=({my})=>{
  return {
    isLogin:my.isLogin
  }
}
// 事件
const mapDispatchToprops=(dispatch)=>{
  return {
  }
}
export default connect(mapStateToProps,mapDispatchToprops)(PrivateRoute)

没有登录跳转到login 页面
import React from 'react'
import Layout from "../../../layout/Layout"
import {connect} from "react-redux" 
import {  Redirect } from "react-router-dom";
import actionCreators from "../store/actionCreators"
  function Login(props) {
     const {isLogin,doLogin,location}=props
     if(isLogin){
        // 登录
        const redirect = (location && location.state && location.state.redirect) || "/"
        return  <Redirect  to={redirect}/>
      }
    return (
        <Layout>
           <div className="login" >
               登录页面
          <button onClick={doLogin}>登录</button>
        </div>
        </Layout>
    )
}
// 参数
const mapStateToProps=({my})=>{
    return {
      isLogin:my.isLogin
    }
  }
  // 事件
  const mapDispatchToprops=(dispatch)=>{
    return {
        doLogin(){
            const action=actionCreators.loginSuccess();
            dispatch(action)
        }
    }
  }
export default connect(mapStateToProps,mapDispatchToprops) (Login)

》点击灯枯后跳转到my页面,此外这个项目需要store的使用

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
React移动端项目中,你可以通过添加CSS样式和使用React组件来禁止滑动。以下是一种常见的方法: 1. 创建一个全局的CSS文件,例如`global.css`,并在你的项目中引入它。 2. 在`global.css`文件中添加以下CSS样式: ```css /* 禁止滑动 */ body { overflow: hidden; } .modal-open { overflow: hidden; position: fixed; width: 100%; } ``` 上述CSS样式会将页面的滚动条和滑动行为禁止掉,同时保持弹窗内容可滚动。 3. 在你的React组件中,使用state来控制弹窗的显示与隐藏,并通过条件渲染来添加相应的CSS类名。 ```jsx import React, { useState } from 'react'; import './global.css'; function App() { const [modalOpen, setModalOpen] = useState(false); const openModal = () => { setModalOpen(true); }; const closeModal = () => { setModalOpen(false); }; return ( <div className={modalOpen ? 'modal-open' : ''}> {/* 页面内容 */} <button onClick={openModal}>打开弹窗</button> {/* 弹窗 */} {modalOpen && ( <div className="modal"> <h2>弹窗内容</h2> <button onClick={closeModal}>关闭弹窗</button> </div> )} </div> ); } export default App; ``` 在上述示例中,我们使用了`modalOpen`状态来控制弹窗的显示与隐藏。当弹窗打开时,给根元素添加`modal-open`类名,这将应用之前定义的CSS样式,禁止页面滑动。 通过点击按钮来打开和关闭弹窗,并更新`modalOpen`状态。 这样就可以在React移动端项目中实现弹窗后禁止滑动的效果了。记得在修改完配置后重新启动应用程序。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值