【发布时间】:2021-04-13 19:58:11
【问题描述】:
我用一个使用星球大战 API 的示例重新格式化了这个问题。 我遇到的问题是尝试使用来自 PeoplePage 的状态并在使用 react-router-dom 时传递给 CounterPage。这是我真实网站的一个小例子。我试图用这个例子缩小实际问题的范围。我希望这能澄清我正在努力实现的目标。谢谢!
import React from 'react';
import {BrowserRouter as Router,Switch,Route} from 'react-router-dom';
class ExampleApp extends React.Component{
constructor(){
super()
this.state = {
starWarsPeople:[],
stateNumber:0
}
}
numberHandler(number){
console.log('number',number)
this.setState({stateNumber: this.state.stateNumber + number})
}
componentDidMount(){
fetch('https://swapi.dev/api/people')
.then(response => response.json())
.then(data =>this.setState({starWarsPeople:data}))
}
render(){
const {starWarsPeople,stateNumber} = this.state
console.log(stateNumber);
return(
<Router>
<div>
<Switch>
/* Issue----->*/ <Route path ='/people' exact render = /*Render is where I am stuck */
{starWarsPeople.length !==0
?
<PeoplePage prop1 = {starWarsPeople} increment ={this.numberHandler.bind(this)}/>
:
<div>loading...</div>
}
/>
/* Issue----->*/ <Route path ='/counter' exact render =
/*render is where I am stuck, interval will not go to count prop when this is loaded*/
{starWarsPeople.length !==0
?
/*this example will render but not sure if its right and the interval will not work:
<Route path ='/counter' exact render = {
(props)=><CounterPage {...props} people ={starWarsPeople} key = {stateNumber}/>}/> */
<CounterPage people ={starWarsPeople} key = {stateNumber}/*I want this to re-render every time the inverval changes *//>
:
<div>loading...</div>
}
/>
</Switch>
</div>
</Router>
)
}
}
export default ExampleApp;
class PeoplePage extends React.Component {
constructor(props){
super(props)
this.state ={
number:0
}
}
componentDidMount(){
this.myInterval = setInterval(()=>{
this.setState({state:this.state+1})
this.props.increment(1);
},1000)
}
componentWillUnmount(){
clearInterval(this.myInterval);
}
render(){
return(
<div>
{this.props.prop1.results[0].name}
</div>
)
}
}
const CounterPage =({count})=>{
return(
<div>{count}</div>
)
}
【问题讨论】:
-
嗨,欢迎来到 stackoverflow。您能否更新您的问题以包含Minimal, Complete, and Reproducible 代码示例?还请详细说明您的问题。问题是什么,是否有错误等等。我对您的代码尝试对
<prop> = {<this.state>} <prop>={<this.state>} key={<this.state>}执行的操作感到有些困惑,因为它似乎根本不是有效的 JSX。 -
@DrewReese 为了清楚起见,我更新了问题。感谢您的观看。
标签: javascript reactjs react-router-dom