整合營銷服務商

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

          免費咨詢熱線:

          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


          主站蜘蛛池模板: 国产一区二区三区高清视频| 精品国产一区二区三区香蕉事| 狠狠做深爱婷婷久久综合一区| 麻豆AV无码精品一区二区| 手机福利视频一区二区| 红桃AV一区二区三区在线无码AV| 国产成人精品日本亚洲专一区| 国产成人精品久久一区二区三区av| 国产吧一区在线视频| 亚洲夜夜欢A∨一区二区三区| 欧美av色香蕉一区二区蜜桃小说| 手机看片一区二区| 国产萌白酱在线一区二区| 亚洲一区二区电影| 国产一区二区三区免费观在线| 国产精品久久久久久一区二区三区 | 久久一区二区三区精华液使用方法| 国产一区二区精品尤物| 国产成人精品一区二三区| 精品国产一区二区三区四区| 亚洲无线码在线一区观看| 日本高清无卡码一区二区久久| 无码乱码av天堂一区二区| 免费日本一区二区| 相泽亚洲一区中文字幕| 国产在线视频一区二区三区 | 亚洲午夜日韩高清一区| 亚洲AV日韩综合一区| 少妇精品久久久一区二区三区| 国产精品 一区 在线| 精品理论片一区二区三区| 亚洲AV无码一区二区三区性色| 亚洲一区综合在线播放| 美女福利视频一区| 伊人色综合一区二区三区| 国产精久久一区二区三区| 美女视频一区二区三区| 日美欧韩一区二去三区| 午夜一区二区在线观看| 成人毛片无码一区二区| 亚洲sm另类一区二区三区|