javascript - 在reactjs中的渲染函数内更新数组时渲染视图
问题描述
当渲染器函数内部的数组被更新时,我正在尝试更新我的视图。由于 react 需要状态更改或道具更改来重新渲染,我该如何解决这个问题?
注意:数组正在正确更新,唯一的问题是我无法渲染更新的数组,因为没有发生状态更改。
我的代码
class TextVotePost extends Component {
constructor() {
super();
this.state = {
addOption: 3,
maxImage: 4,
optionBtn: true,
};
this.addOption = this.addOption.bind(this);
}
addOption() {
this.setState(prevState => ({
addOption: ++prevState.addOption,
}));
}
render() {
let list = [];
const textPollMaxLength = 35;
function removetextpoll() {
list.splice(0, 1);
}
for (let i = 3; i <= this.state.maxImage; i++) {
{
this.state.addOption > i &&
list.push(
<div key={i}>
<div className="txt_vote_bar_div">
<div onClick={removetextpoll} />
<Field
name={`inputName${i}`}
component="input"
type="text"
placeholder={`Option ${i}`}
maxLength={textPollMaxLength}
/>
</div>
</div>,
);
}
}
return (
<form onSubmit={this.props.handleSubmit}>
{list}
<div onClick={this.addOption}>
<span>Add Option</span>
</div>
}
</form>
);
}
}
解决方案
没有setState()
React 不知道它应该重新渲染你的视图。
class TextVotePost extends React.Component {
constructor() {
super();
this.state = {
addOption: 0,
maxImage: 4,
optionBtn: true,
};
this.addOption = this.addOption.bind(this);
this.removetextpoll = this.removetextpoll.bind(this);
}
addOption() {
this.setState(prevState => ({
addOption: ++prevState.addOption,
}));
}
removetextpoll() {
this.setState(prevState => ({
addOption: --prevState.addOption,
}));
}
render() {
const textPollMaxLength = 35;
return (
<form onSubmit={this.props.handleSubmit}>
{[...Array(this.state.addOption).keys()].map((item, i) => (
<div key={i}>
<div className="txt_vote_bar_div">
<div onClick={this.removetextpoll}>remove</div>
<Field
name={`inputName${i}`}
component="input"
type="text"
placeholder={`Option ${i}`}
maxLength={textPollMaxLength}
/>
</div>
</div>
))}
<div onClick={this.addOption}>
<span>Add Option</span>
</div>
{JSON.stringify(this.state)}
</form>
);
}
}
ReactDOM.render(<TextVotePost />, document.querySelector("#app"))
推荐阅读
- bash - Bash 脚本 - 我无法在 sed 中添加新行
- python - “预期一维数组时传递了列向量 y”的错误
- angular - angular 11 的“npm i ngx-slick-carousel”出现错误
- sqlalchemy - SQLAlchemy 使用关联对象删除多对多
- emulation - 虚拟 twain 扫描仪,返回配置的文件/扫描仪模拟器
- python - 为 Jinja 模板导入 JSON 文件
- c# - Decryption using CryptoStream returns an empty file
- discord.js - 我的机器人没有看到事件“guildMemberAdd”,为什么?
- javascript - 打印 Node 命令行参数时,为什么要删除正斜杠?
- python-3.x - 如何解决“列表没有属性查找”