javascript - 先渲染页面,然后数据才进来,但是页面上还保留着旧数据
问题描述
过渡是通过 react-router 完成的。我正在尝试使用 Redux 制作第一个项目,但遇到了我的页面正在加载目前不需要的数据的问题。
更具体地说,我在一个表单中有 2 个类,用于选择 3 个组件中的 1 个,索引 1 分别附加到 2 和 3。在控制台中,您可以看到当单击时,Redux 会拾取 Store 中的数据。
选择任何组件后,进入下一页的按钮变为可用。切换到它之后,我想在角落里显示已经输入的数据,但是那里已经输入了一个默认值。我得出的结论是,第二个页面在用户选择选项之前不可用,它在选择之前呈现并且之后不更新,这就是默认挂起的原因。
也许有一个选项可以禁止渲染,直到标志采用不同的值或类似的东西?
图片显示在最后一个文件中,值 0 立即被取,不再改变。我的代码
import React, { Component } from 'react'
import { Card,CardGroup,Button,Navbar,Nav } from 'react-bootstrap'
import A2 from '../assets/A2example.png'
import A3 from '../assets/A3example.png'
import A4 from '../assets/A4example.png'
import {BrowserRouter, Route, Switch, Link, } from 'react-router-dom'
import ZakazPortretaSecond from '../pages/ZakazPortretaSecond';
import store from '../redux/store'
import { connect } from 'react-redux'
class ZakazPortreta extends Component {
constructor(props){
super(props)
this.state = {
choosen: 4
}
}
portretSize(a){
this.setState({
choosen: a
})
store.dispatch({
type: 'SET_FORMAT_BY',
payload: a,
})
console.log(store.getState())
}
render() {
return (
<div className = "ZakazDiv">
<h2>Выберите желаемый размер портрета:A{this.state.choosen}</h2><br/>
<Navbar.Toggle aria-controls = "responsive-navbar-nav">
<Link to="/ZakazPortretaSecond" >Далее</Link>
</Navbar.Toggle>
<CardGroup>
<Card>
<Card.Body className = "cards" onClick={()=> this.portretSize(4)}>
<Card.Title>А4</Card.Title>
<Card.Subtitle className="mb-2 text-muted">210×297 мм</Card.Subtitle>
<Card.Text>
<img src = {A4} width = "370" height = "550"/>
</Card.Text>
</Card.Body>
</Card>
<Card >
<Card.Body className = "cards" onClick={()=> this.portretSize(3)}>
<Card.Title>А3</Card.Title>
<Card.Subtitle className="mb-2 text-muted">297 x 420 мм</Card.Subtitle>
<Card.Text>
<img src = {A3} width = "370" height = "550"/>
</Card.Text>
</Card.Body>
</Card>
<Card >
<Card.Body className = "cards" onClick={()=> this.portretSize(2)}>
<Card.Title>А2</Card.Title>
<Card.Subtitle className="mb-2 text-muted"> 420 x 594 мм</Card.Subtitle>
<Card.Text>
<img src = {A2} width = "370" height = "550"/>
</Card.Text>
</Card.Body>
</Card>
</CardGroup>
<BrowserRouter >
<div>
<Nav />
<Route path="/ZakazPortretaSecond" component={ZakazPortretaSecond} />
</div>
</BrowserRouter >
</div>
)
}
}
const mapStateToProps = (state) => {
console.log("Actual value",store.getState())
return{
format: state.format,
}
}
export default connect(mapStateToProps)(ZakazPortreta)
和第二个文件
import React, { Component } from 'react'
import store from '../redux/store'
console.log("inside last file",store.getState())
class ZakazPortretaSecond extends Component {
render() {
return (
<div>
<h2 className='textSecond text-center'>Вы выбрали:A{store.format}</h2>
</div>
)
}
}
export default ZakazPortretaSecond
解决方案
我通过在加载工作代码的页面上单独更新信息解决了这个问题:
import React, { Component } from 'react'
import store from '../redux/store'
console.log("inside last file",store.getState())
const refreshInf = () => {
let formats = store.getState().format
console.log(formats)
return formats
}
class ZakazPortretaSecond extends Component {
render() {
return (
<div onLoad = {refreshInf()}>
<h2 className='textSecond text-center'>Вы выбрали:A{refreshInf()}</h2>
</div>
)
}
}
export default ZakazPortretaSecond
div上的refreshInf函数已经刷新store中的信息了!
推荐阅读
- java - 如何通过 JNI 调用 Java 方法让 JVM 垃圾收集参数?
- dart - 如何在 Flutter 中创建类似于 android 照片应用的多选 gridview 布局?
- url - 是否有一个 URL 可用于通过代理重定向另一个 URL?
- algorithm - 恢复时间最短的路径
- php - 如何使用不同的变量在函数中预定义变量?
- handlebars.js - 即使陈述为真,车把 if/else 也不起作用
- json - 如何在命令行中使用 utf 8 漂亮地打印 json?
- html - 将进度跟踪器更改为父容器的完整跨度
- python - 如何使用 PIL 优化调色板图像大小?
- python - pandas 根据前缀重塑 long