整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          React 路由 react-router 傳參的方法

          、前言

          前面寫了一篇react-router的簡單應用的文章,講的是如何實現網頁內容切換跳轉的方法:

          React 路由 react-router 入門實踐

          本文新增跳轉的同時,攜帶傳參的處理方法


          二、代碼



          當URL和Route匹配時,Route會創建一個match對象作為props中的一個屬性傳遞給被渲染的組件,里邊的params屬性便是路由跳轉攜帶的值。

          1.頁面組件

          Index.js

          import React, { Component, Fragment } from 'react'
          
          class import React, { Component, Fragment } from 'react'
          
          class Index extends Component {
              constructor(props) {
                  super(props)
                  this.state = {}
              }
              render() {
                  return (
                      <Fragment>
                          <h2>首頁</h2>
                      </Fragment>
                  )
              }
          
          }
          export default Index;
          
           extends Component {
              constructor(props) {
                  super(props)
                  this.state = {}
              }
              render() {
                  return (
                      <Fragment>
                          <h2>首頁</h2>
                      </Fragment>
                  )
              }
          
          }
          export default Index;
          
          

          AmericaPage.js

          import React, { Component, Fragment } from 'react'
          
          class AmericaPage extends Component {
              constructor(props) {
                  super(props)
                  this.state = {}
              }
              render() {
                  return (
                      <Fragment>
                          <h2>美國{this.props.match.params.product}</h2>
                      </Fragment>
                  )
              }
          
          }
          export default AmericaPage;
          
          

          ChinaPage.js

          import React, { Component, Fragment } from 'react'
          
          class ChinaPage extends Component {
              constructor(props) {
                  super(props)
                  this.state = {}
              }
              render() {
                  return (
                      <Fragment>
                          <h2>中國{this.props.match.params.product}</h2>
                      </Fragment>
                  )
              }
          
          }
          
          export default ChinaPage;

          2.路由規則傳參

          import React from "react";
          import { BrowserRouter as Router, Route, Link } from "react-router-dom";
          import AmericaPage from './pages/AmericaPage'
          import ChinaPage from './pages/ChinaPage'
          import Index from './pages/Index'
          
          function AppRouter() {
              return (
                  <Router>
                      <ul>
                          <li><Link to="/">首頁</Link></li>
                          <li><Link to="/america/apple">美國</Link></li>
                          <li><Link to="/china/huawei">中國</Link></li>
                      </ul>
                      <Route path="/" exact component={Index} />
                      <Route path="/america/:product" component={AmericaPage} />
                      <Route path="/china/:product" component={ChinaPage} />
                  </Router>
              );
          }
          export default AppRouter;


          三、效果

          可見,傳遞了參數 product,并進行頁面展示:



          四、其他

          我們也經常通過js的方式,history.push進行路由切換,而單通過 html

          用 Javascript 的軟件項目

          首先我們回顧一下vue2中父子組件是怎么傳值的,然后對比vue3進行詳解。

          一、vue2中父子組件傳值

          <!-- 父組件 -->
          <template>
              <div>
            		// name:父組件把值傳給子組件test-child
            		// childFn:子組件傳遞值給父組件的自定義方法
                <test-child :name="name" @childFn="parentFn"></test-child>
                子組件傳來的值 : {{message}}
              </div>
          </template>
          
          <script>
          export default {
              data() {
                  return {
                    message: '',
                    name: '張三'
                  }
              },
              methods: {
                // 接收子組件的傳值
                 parentFn(payload) {
                   this.message = payload;
                 }
              }
          }
          </script>
          <!-- 子組件 -->
          <template> 
              <div>
            			{{name}}
                  <input type="text" v-model="message" />
                  <button @click="click">發送消息給父組件</button>
              </div>
          </template>
          <script>
          export default {
          		props:{
                name:{
                  type:String,
                  default:''
                }
              }
              data() {
                  return {
                    message: '我是來自子組件的消息'
                  }
              },
              methods: {
                click() {
                      // 1、childFn 組件方法名,請對照父組件
                      // 2、message是傳遞給父組件的數據
                      this.$emit('childFn', this.message);
                  }
              }    
          }
          </script>

          上面的代碼可以看到我們vue2中父子組件之間傳值是通過prop傳值給子組件,子組件通過$emit把值傳遞給父組件進行交互。那么我們下面看看vue3中是如何進行組件之間傳值的。

          二、provide & inject

          vue3提供了provide() 和 inject() 兩個方法,可以實現組件之間的數據傳遞。父級組件中使用 provide() 函數向子組件傳遞數據;子級組件中使用 inject() 獲取父組件傳遞過來的數據。代碼如下:

          <!-- 父組件 -->
          <template>
            <div id="app">
              <test-child></test-child>
            </div>
          </template>
          <script>
          import testChild from './components/testChild'
          // 1. 按需導入 provide
          import { provide } from '@vue/composition-api'
          export default {
            name: 'app',
            setup() {
              //  App 根組件作為父級組件,通過 provide 函數向子級組件共享數據(不限層級)
              //  provide('要共享的數據名稱', 被共享的數據)
              provide('color', 'red')
            },
            components: {
              testChild
            }
          }
          </script>
          <template>
            <div>
            <!--  通過屬性綁定,為標簽設置字體顏色 -->
            <h3 :style="{color: themeColor}">Level One</h3>
          </div>
          </template>
          <script>
          import { inject } from '@vue/composition-api'
          export default {
            setup() {
              // 調用 inject 函數時,通過指定的數據名稱,獲取到父級共享的數據
              const themeColor = inject('color')
              // 把接收到的共享數據 return 給 Template 使用,進行數據渲染
              return {
                themeColor
              }
            }
          }
          </script>

          通過上面的代碼我們可以發現,vue3中數據傳值更加簡單了,不用再引入子組件標簽上寫屬性,直接通過provide()設置指定的名稱,可以在子組件中通過inject()拿到,是不是感覺很簡單呢。

          東優就業

          頁面傳值小技巧

          平常我們在做的web項目,一般一個HTML頁面上會有好幾個步驟,step_num①,step_num②,step_num③,一般先顯示step_num①,根據跳轉條件顯示step_num②,step_num①隱藏,再跳轉step_num③,step_num①,step_num②隱藏,step_num③顯示。

          思路: (js設置全局變量,哪里需要在哪里添加一個input標簽,把值賦給一個input,然后再讓input隱藏)

          廣東優就業

          先說下這個頁面的結構,進入xxx.html頁面,通過js發送ajax.postForm請求,請求一個action,action調用handler,每一個功能都要請求一個action。

          廣東優就業

          前兩天就是這樣的一個頁面,然后在傳值的時候就碰到了一個讓人腦仁疼的問題,需要在step_num①中顯示和未顯示的值,傳到step_num③對應的后臺Java代碼,試了好幾種方法都不好用,最后,采用了一個小技巧

          在js中先設一個全局變量,比如var groupID=" "; ,然后把從step_num①中從后臺action傳過來的GroupID賦給groupID,怎么傳給頁面三對應的Java后臺呢?

          現在step_num③對應的HTML代碼中寫上這樣一條語句:<input id="chuanzhi" name="chuanzhi" type="hidden"/>然后在對應的js代碼中把 $("#chuanzhi").val(groupID);

          這樣你在step_num③對應的Java后臺中就可以通過request.getParameter("chuanzhi"); 獲得你想要的groupID了

          更多IT精彩內容推薦:http://www.ujiuye.com/guangdong/?wt.mc_id=17009338


          主站蜘蛛池模板: 久久精品人妻一区二区三区| 久草新视频一区二区三区| 日本一区二区三区免费高清在线| 日本免费一区尤物| 精品无码国产一区二区三区51安| 国产午夜毛片一区二区三区| 亚洲欧美一区二区三区日产| 日本丰满少妇一区二区三区| 一区二区三区四区视频| 伊人久久精品无码av一区| 一区二区三区人妻无码| 中文字幕在线播放一区| 一区二区三区久久精品| 日本一区二区三区在线视频观看免费| 无码精品一区二区三区| 午夜福利无码一区二区| 国产精品亚洲一区二区麻豆| 成人区精品一区二区不卡亚洲| 亚洲无圣光一区二区| 无码人妻久久一区二区三区| 国产人妖视频一区二区| 国产精品日本一区二区不卡视频| 国产亚洲一区二区手机在线观看| 成人区人妻精品一区二区不卡视频 | 中文字幕一区二区三区四区 | 国产精品免费一区二区三区| 一区二区在线视频免费观看| 无码毛片一区二区三区视频免费播放| 天天综合色一区二区三区| 精品国产一区二区三区免费看| 国产亚洲综合一区二区三区| 午夜精品一区二区三区在线观看| 免费人人潮人人爽一区二区| 久久精品国产一区二区电影| 国产a∨精品一区二区三区不卡| 亚洲AV日韩AV天堂一区二区三区 | 日本免费一区二区在线观看 | 精品福利视频一区二区三区| 中文字幕AV无码一区二区三区| 爆乳无码AV一区二区三区| 精品一区二区高清在线观看|