【发布时间】:2020-06-19 10:06:03
【问题描述】:
我对同时进行 react 和 redux 很陌生。
我正在构建这个应用程序,其中包含由数百个问题组成的问卷调查。我想实时保留问题的答案,以便用户可以随时回来继续。
问题是,当我渲染 300 个元素时,每次发送持久化答案需要超过 2 秒。
这是我用于每个问题(项目)的组件。
import React from 'react';
import {setAnswer} from "../actions";
import {connect} from 'react-redux'
import {Container,Row,Col} from 'react-bootstrap'
import {Radio, RadioGroup,FormControlLabel} from '@material-ui/core'
class FormItem extends React.Component {
constructor(props) {
super(props);
this.state = {
answer: this.props.answers[this.props.item.nr] ? this.props.answers[this.props.item.nr] : 0
}
this.handleChange = this.handleChange.bind(this)
}
handleChange(event){
const target = event.target;
this.setState({
answer:target.value
})
this.props.setAnswer(this.props.item.nr,target.value)
}
render() {
return (
<Row className={"item-row" + (this.state.answer != 0 ? " answered" : "")}>
<Col md={"5"}><div>{this.props.item.text}</div></Col>
<Col md={"7"}>
<RadioGroup name={"item"+this.props.answers.nr} value={this.state.answer} onChange={this.handleChange}>
<Row>
<Col className={"text-center"}><FormControlLabel value="1" control={<Radio color="primary" />} /></Col>
<Col className={"text-center"}><FormControlLabel value="2" control={<Radio color="primary" />} /></Col>
<Col className={"text-center"}><FormControlLabel value="3" control={<Radio color="primary" />} /></Col>
<Col className={"text-center"}><FormControlLabel value="4" control={<Radio color="primary" />} /></Col>
<Col className={"text-center"}><FormControlLabel value="5" control={<Radio color="primary" />} /></Col>
</Row>
</RadioGroup>
</Col>
</Row>
);
}
}
const mapStateToProps = (state) => {
return {
answers : state.answers
}
}
const mapDispatchToProps = () => {
return {
setAnswer
}
}
export default connect(mapStateToProps,mapDispatchToProps())(FormItem);
问题在于,如果我同时渲染页面上的全部 300 个项目,则在无线电更改上调度 setAnswer 操作需要 2.5 秒。如果我一次只渲染 30 个,效果还不错。现在,300 并不是一个很大的数字,所以我假设我做错了什么,因为性能受到了很大影响。
谢谢!
【问题讨论】:
标签: reactjs performance react-redux redux-persist