React几种传递参数的方法

1.父组件向子组件传参

回调函数也是参数的一种,也可以传给子组件,达到子组件控制父组件的目的

import React from 'react';
import ReactDOM from 'react-dom';

function Son(props) {
	return <div>父组件的名称是{props.name}</div>
}

function Father(props) {
	return (
		<Son name="Father"/>
	);
}
ReactDOM.render(<Father/>, document.getElementById('root'));

2.事件处理函数传参

import React from 'react';
import ReactDOM from 'react-dom';

function Father(props) {
	function getName(e) {
		console.log(`传递参数的值是${e}`);
	}
	return (<button onClick={getName.bind(this,"Father")}>click me</button>);
}
ReactDOM.render(<Father/>, document.getElementById('root'));

3.路由传参

函数组件,可以使用hook

import React from 'react';
import ReactDOM from 'react-dom';



import {
	BrowserRouter as Router,
	Switch,
	Route,
	Link,
	useParams
} from "react-router-dom";


export default function ParamsExample() {
	return (
		<Router>
      <div>
   <ul>
       <li>
            <Link to="/yahoo/321">Yahoo321</Link>
          </li>
          <li>
            <Link to="/yahoo/123">Yahoo123</Link>
          </li>
     </ul>
        <Switch>
          <Route path="/yahoo/:id" children={<Child />} />
        </Switch>
      </div>
    </Router>
	);
}
function Child(props) {

	let {
		id
	} = useParams();

	return (
		<div>
      <h3>ID: {id}</h3>
    </div>
	);
}



ReactDOM.render(<ParamsExample/>, document.getElementById('root'));

类组件,使用this.props.match.params

import React from 'react';
import ReactDOM from 'react-dom';



import {
	BrowserRouter as Router,
	Switch,
	Route,
	Link,
	useParams
} from "react-router-dom";


export default function ParamsExample() {
	return (
		<Router>
      <div>
   <ul>
       <li>
            <Link to="/yahoo/321">Yahoo321</Link>
          </li>
          <li>
            <Link to="/yahoo/123">Yahoo123</Link>
          </li>
     </ul>
        <Switch>
         <Route path="/yahoo/:id" component={Child}/>
        
        </Switch>
      </div>
    </Router>
	);
}
// <Route path="/yahoo/:id" children={<Child/>} />
//  <Route path="/yahoo/:id" Component={Child} />
// function Child(props) {

// 	let {
// 		id
// 	} = useParams();

// 	return (
// 		<div>
//       <h3>ID: {id}</h3>
//     </div>
// 	);
// }

class Child extends React.Component {
	constructor(props) {
		super(props);

	}

	componentDidMount() {
		//console.log(this.props.match);
		//	console.log(this.props.history);
		//console.log(this.props.location);
	}
	render() {

		return (<div>
       <h3>ID:{this.props.match.params.id}</h3>
     </div>)
	}


}


ReactDOM.render(<ParamsExample/>, document.getElementById('root'));

注意,引入子组件需要这么写:<Route path="/yahoo/:id" component={Child}/>

4.URL传参

import React from 'react';
import ReactDOM from 'react-dom';



import {
	BrowserRouter as Router,
	Switch,
	Route,
	Link,
	useParams
} from "react-router-dom";


export default function ParamsExample() {
	return (
		<Router>
      <div>
   <ul>
       <li>
            <Link to="/yahoo?id=321">Yahoo321</Link>
          </li>
          <li>
            <Link to="/yahoo?id=123">Yahoo123</Link>
          </li>
     </ul>
        <Switch>
         <Route path="/yahoo" component={Child}/>
        
        </Switch>
      </div>
    </Router>
	);
}
// <Route path="/yahoo/:id" children={<Child/>} />
//  <Route path="/yahoo/:id" Component={Child} />
// function Child(props) {

// 	let {
// 		id
// 	} = useParams();

// 	return (
// 		<div>
//       <h3>ID: {id}</h3>
//     </div>
// 	);
// }

class Child extends React.Component {
	constructor(props) {
		super(props);

	}

	componentDidMount() {
		//console.log(this.props.match);
		//	console.log(this.props.history);
		console.log(this.props.location.search);
	}
	render() {

		return (<div>
       <h3>ID:{this.props.match.params.id}</h3>
     </div>)
	}


}


ReactDOM.render(<ParamsExample/>, document.getElementById('root'));

5. history.push传递参数

function onTouch(e) {
	history.push({
		pathname: "/home",
		state: {
			postId: e
		}
	});

}
import {useLocation} from 'react-router-dom';
let location = useLocation();
console.log("id", location.state.postId)

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React中,有多种方法可以通过地址栏传递参数。其中一种方法是使用params参数。在路由链接中,可以使用`<Link>`组件将参数传递给目标页面,例如: ```jsx <Link to="/production/123">跳转到产品页面</Link> ``` 在Route组件中,需要配置参数名称,例如: ```jsx <Route path="/production/:productionId" component={production} /> ``` 在目标页面(production组件)中,可以通过this.props.match.params来获取传递的参数,例如: ```jsx const { productionId } = this.props.match.params; ``` 另一种方法是使用state参数。在路由链接中,可以使用`<Link>`组件将参数传递给目标页面,例如: ```jsx <Link to={{ pathname: '/list', state: { name: 'xlf' } }}>跳转到列表页面</Link> ``` 在目标页面中,可以通过this.props.location.state来获取传递的参数,例如: ```jsx console.log(this.props.location.state.name); // 输出传递过来的name参数 ``` 还有其他的传递参数方法,如search参数和query参数。但是需要注意,这些方法有一些限制,例如只能传递字符串,不能传递对象,并且参数过多可能导致URL过长。另外,在使用HashRouter时,刷新地址栏会导致参数丢失,而BrowserRouter则不会丢失参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [React 路由传参的三种方式](https://blog.csdn.net/weixin_42332641/article/details/125374675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [react页面跳转带参数](https://blog.csdn.net/weixin_54368936/article/details/122452871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [react路由传递参数几种方法](https://blog.csdn.net/Dax1_/article/details/126445502)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值