我正在構建我的第一個React應用程序。我試圖渲染一些來自react-router-dom的路由。 從我調用我的api獲取一個json對象的主要組件,然後我更新狀態。問題是我設置新狀態後,我的子組件不會重新渲染,因此我沒有子組件中的道具。我已經使用了一些功能,如forcerender和componentWillReceiveProps,但仍然不起作用異步調用後渲染路線
我敢肯定這不是一個大問題,但我一直試圖解決這個問題幾個小時,我一直無法做到這行得通。
這裏是我的最新嘗試:
class DetectorEfficiencyCalculator extends Component {
constructor(props) {
super(props);
this.state = {
detectors: []
};
axios.get(`/detectors`)
.then(res => {
const detectors = res.data;
this.setState({ detectors });
console.log('state updated')
});
}
render() {
return (
<div className="DetectorEfficiencyCalculator">
<RoutesHandler detectors={this.state.detectors}/>
</div>
);
}
}
class RoutesHandler extends Component{
constructor(props) {
super(props);
this.state = { detectors: props.detectors } ;
}
componentWillReceiveProps(nextProps) {
this.setState({detectors:nextProps.detectors})
this.forceUpdate()
}
render() {
console.log('render')
return (
<div className="RoutesHandler">
<Switch>
<Route exact path='/frontend/Detectors' component={DetectorList} detectors={this.props.detectors}/>
<Route path='/frontend/Detectors/:number' component={DetectorDetail} detectors={this.props.detectors}/>
</Switch>
</div>
);
}
}
class DetectorList extends Component {
render() {
console.log('renderList')
if (!this.props.detectors) {
return null;
}
return (
<ul>
{this.props.detectors.map(u => {
return (
<Detector
id={u.id}
name={u.name}
single={u.single}
threshold={u.threshold}
angle={u.angle}
/>
);
})}
</ul>
);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
在此先感謝您的幫助:)
[請不要把問題標題標籤(https://stackoverflow.com/help/tagging) – Liam
把'的console.log( 'renderList',這一點。 props.detectors)'在DetectorList組件中,並檢查您是否獲得更新的值。 –