React redux和react-router安装使用和常规项目结构搭建

安装

  1. 全局安装脚手架:
    npm install -g create-react-app

  2. 创建新项目:
    create-react-app my-app

  3. 安装react-app-rewired
    yarn add react-app-rewired@2.0.2-next.0 babel-plugin-import
    将package.json中的script启动方式替换为rewired
    "scripts": {
    “start”: "react-app-rewired start“
    }

  4. 安装ant Ui插件
    yarn create react-app antd-demo

  5. 安装react-router 路由:
    npm i react-router-dom

  6. 安装: redux
    yarn add redux react-redux 或者 npm i redux react-redux

  7. 安装: redux-logger redux-thunk
    yarn add redux-thunk react-logger(redux中间件)

项目搭建

新建 config-overrides.js

const {injectBabelPlugin} = require('react-app-rewired');
module.exports = function override(config,env){  //antd 按需加载
  config = injectBabelPlugin([
  //引入模块:antd , 文件夹名:es,包含:css
  'import',{libraryName:'antd-mobile',libraryDirectory:'es',style:'css'}],config)
   //添加装饰器能力
  config = injectBabelPlugin(
     ['@babel/plugin-proposal-decorators',{legacy:true}],config
  )
 return config;
}

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import 'lib-flexible' 
import './assets/font_74bntjvs7d9/iconfont.css' // 字体文件
import App from './App';
import * as serviceWorker from './serviceWorker';
import './index.css';
import {Provider} from 'react-redux'
import reducer from './store'
import {createStore,applyMiddleware} from 'redux'
import thunk from 'redux-thunk'
import logger from 'redux-logger'
const store = createStore(reducer,applyMiddleware(thunk,logger))
ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>
, document.getElementById('root'));

serviceWorker.unregister();

index.html

<!DOCTYPE html>
<html>
<head>
  <!-- set `maximum-scale` for some compatibility issues -->
  <!-- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" /> -->
  <meta name="description" content="QQ音乐是腾讯公司推出的一款网络音乐服务产品,海量音乐在线试听、新歌热歌在线首发、歌词翻译、手机铃声下载、高品质无损音乐试听、海量无损曲库、正版音乐下载、空间背景音乐设置、MV观看等,是互联网音乐播放和下载的优选。">
  <meta name="keywords" content="音乐,音乐网站,mp3下载,音乐下载,在线听歌,正版音乐,歌词,歌词翻译,MV,新歌热歌,经典老歌,音乐排行榜,空间背景音乐,播放器,高品质音乐,无损音乐,电台,专辑,歌单,歌手">
  <link rel="shortcut icon" href="//y.qq.com/favicon.ico?max_age=2592000">
  <!-- 是否启动webapp功能 设置为yes 网站就会在满屏模式full-screen mode删除默认的苹果工具栏和菜单栏  -->
  <meta content="yes" name="apple-mobile-web-app-capable" />
  <!-- 开启对web app程序的支持  -->
  <meta content="yes" name="apple-touch-fullscreen" />
  <!-- 忽略识别手机号码和邮箱 -->
  <meta content="telephone=no,email=no" name="format-detection">
  <title>QQ音乐 - 千万正版音乐海量无损曲库新歌热歌天天畅听的高品质音乐平台!</title>
  <script src="https://as.alipayobjects.com/g/component/fastclick/1.0.6/fastclick.js"></script>
  <script>
    if ('addEventListener' in document) {
      document.addEventListener('DOMContentLoaded', function() {
        FastClick.attach(document.body);
      }, false);
    }
    if(!window.Promise) {
      document.writeln('<script src="https://as.alipayobjects.com/g/component/es6-promise/3.2.2/es6-promise.min.js"'+'>'+'<'+'/'+'script>');
    }
  </script>
</head>
<body>
  <div id="root"></div>
</body>
</html>

redux

在src下新建store文件夹
在这里插入图片描述
index.js

import {combineReducers} from 'redux'
import player from './player.redux'
import rank from './rank.redux'
import recommend from './recommend.redux'
import search from './search.redux'
import songList from './songList.redux'
export default combineReducers({player,rank,recommend,search,songList})

player.redux.js

 基本结构
export default(state,action)=>{
  state = state || {}
   switch(action.type){
      case 'send':
      retun{...state,data:action.data}
      default:
      return state
  }
}

rank.redux.js

import * as api from '../api'
export default (state,action)=>{
    state = state || {}
    switch(action.type){
        case 'RANK_INIT':
        return {data:action.data}
        default:
        return state
    }
}

//异步请求方法
export const rank =()=>(dispatch)=>{
   fetch(aip.TOP_LIST).then(res=>res.json()).then(req=>{
     dispatch({type:"RANK_INIT",data:req.data})
  })
}

Rank.jsx

import React from 'react';
import {connect} from 'react-redux'; // redux 装饰器
import {rank} from '../../store/rank.redux'
 
 @connect(
  (state)=>({
   data:state.rank.data
  }),
  {
  rank
  }
)

 class Rank  extends React.Component{
    constructor(props){
     super(props)
    }
    componentDidMount(){
      this.props.rank()
    }
}

export default Rank;

react-router使用
app.js

import React from 'react';
import { BrowserRouter as Router, Route,Redirect,Switch } from 'react-router-dom'
import Home from './components/Home'
import SongList from './components/SongList'
import Player from './components/Player'
import './App.css';

class App extends React.Component {
  render() {
    return (
      <Router>
        <Switch>
          <Route path="/songList/:id" component={SongList}></Route>
          <Route path="/player/:songMid/:songId" component={Player}></Route>
          <Route path="/" component={Home}></Route>
        </Switch>
      </Router>
    );
  }
}

export default App;

home.jsx

import React from 'react';
import {NavLink,Route,Redirect,Switch} from 'react-router-dom'
import Recommend from '../Recommend'
import Rank from '../Rank'
import Search from '../Search'
import './index.css';
 class App extends React.Component {
   render(){
    return (
        <div>
                 	/* <!-- 导航区 --> */
           <NavLink to="/recommend">推荐</NavLink>
            <NavLink to="/rank">排行榜</NavLink>
            <NavLink to="/search">搜索</NavLink>
             <Switch>
            <Route exact path="/recommend" component={Recommend}></Route>
            <Route path="/rank" component={Rank}></Route>
            <Route path="/search" component={Search}></Route>
            <Redirect to="/recommend"/>
          </Switch>
         </div>
       )
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
react-native-redux-router是一个用于在React Native应用中管理路由和状态的库。它结合了React Native、ReduxReact Navigation,提供了一种方便的方式来处理应用程序的导航和状态管理。 下面是一个简单的示例,演示了如何在React Native应用中使用react-native-redux-router: 1. 首先,安装所需的依赖项。在终端中运行以下命令: ```shell npm install react-native react-redux redux react-navigation react-native-router-flux --save ``` 2. 创建一个Redux store,并将其与React Native应用程序的根组件连接起来。在App.js文件中,添加以下代码: ```javascript import React from 'react'; import { Provider } from 'react-redux'; import { createStore } from 'redux'; import rootReducer from './reducers'; import AppNavigator from './navigation/AppNavigator'; const store = createStore(rootReducer); export default function App() { return ( <Provider store={store}> <AppNavigator /> </Provider> ); } ``` 3. 创建一个导航器组件,并定义应用程序的导航结构。在navigation/AppNavigator.js文件中,添加以下代码: ```javascript import { createAppContainer } from 'react-navigation'; import { createStackNavigator } from 'react-navigation-stack'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import { Actions } from 'react-native-router-flux'; import HomeScreen from '../screens/HomeScreen'; import DetailsScreen from '../screens/DetailsScreen'; const MainNavigator = createStackNavigator({ Home: { screen: HomeScreen }, Details: { screen: DetailsScreen }, }); const AppNavigator = createAppContainer(MainNavigator); const mapStateToProps = state => ({ // 将Redux状态映射到导航器组件的props中 }); const mapDispatchToProps = dispatch => bindActionCreators(Actions, dispatch); export default connect(mapStateToProps, mapDispatchToProps)(AppNavigator); ``` 4. 创建屏幕组件,并在其中使用导航和Redux状态。在screens/HomeScreen.js文件中,添加以下代码: ```javascript import React from 'react'; import { View, Text, Button } from 'react-native'; import { Actions } from 'react-native-router-flux'; const HomeScreen = () => { return ( <View> <Text>Welcome to the Home Screen!</Text> <Button title="Go to Details" onPress={() => Actions.details()} /> </View> ); } export default HomeScreen; ``` 5. 创建其他屏幕组件,并在其中使用导航和Redux状态。在screens/DetailsScreen.js文件中,添加以下代码: ```javascript import React from 'react'; import { View, Text, Button } from 'react-native'; import { Actions } from 'react-native-router-flux'; const DetailsScreen = () => { return ( <View> <Text>Welcome to the Details Screen!</Text> <Button title="Go back" onPress={() => Actions.pop()} /> </View> ); } export default DetailsScreen; ``` 这是一个简单的示例,演示了如何在React Native应用中使用react-native-redux-router来管理路由和状态。你可以根据自己的需求进行扩展和定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值