gpt4 book ai didi

javascript - 停止输入重新渲染 onChange

转载 作者:行者123 更新时间:2023-11-29 16:33:43 25 4
gpt4 key购买 nike

我将输入值捕获为状态,然后在按钮提交时我想将结果添加到数组中。

我遇到的问题是每次我在输入字段中输入一个字符时,它都会在我点击提交按钮之前创建一个新数组。

以下是奇怪行为的截图。

enter image description here

这是我的代码:

import React, { Component } from "react";
import autoBind from "react-autobind";

let fixtures = [];

const submitFixture = (homeTeam, awayTeam) => {
fixtures.push({
homeTeam: homeTeam,
awayTeam: awayTeam
});
};
class CreateFixture extends Component {
constructor(props) {
super(props);
autoBind(this);

this.state = {
homeTeam: "",
awayTeam: ""
};
}

render() {
const { homeTeam, awayTeam } = this.state;

return (
<React.Fragment>
<p>Home Team</p>
<input
value={homeTeam}
onChange={e => {
this.setState({ homeTeam: e.target.value });
}}
/>
<p>Away Team</p>
<input
value={awayTeam}
onChange={e => {
this.setState({ awayTeam: e.target.value });
}}
/>
<button onClick={submitFixture(homeTeam, awayTeam)}>
Create fixture
</button>
{console.log(fixtures)}
</React.Fragment>
);
}
}

export default CreateFixture;

最佳答案

您通过编写 onClick={submitFixture(homeTeam, awayTeam)} 直接在渲染上调用您的 submitFixture 函数。这样,每次重新渲染组件时,您都会向数组添加一个新元素。

您可以创建一个新的内联函数,改为在发生点击事件时调用 submitFixture

<button onClick={() => submitFixture(homeTeam, awayTeam)}>

如果您想以某种方式呈现fixtures,最好将它们置于组件状态。

示例

class CreateFixture extends React.Component {
state = {
homeTeam: "",
awayTeam: "",
fixtures: []
};

submitFixture = () => {
this.setState(({ homeTeam, awayTeam, fixtures }) => ({
fixtures: [...fixtures, { homeTeam, awayTeam }]
}));
};

render() {
const { homeTeam, awayTeam, fixtures } = this.state;

return (
<div>
<p>Home Team</p>
<input
value={homeTeam}
onChange={e => {
this.setState({ homeTeam: e.target.value });
}}
/>
<p>Away Team</p>
<input
value={awayTeam}
onChange={e => {
this.setState({ awayTeam: e.target.value });
}}
/>
<button onClick={this.submitFixture}>Create fixture</button>
<div>{JSON.stringify(fixtures)}</div>
</div>
);
}
}

ReactDOM.render(<CreateFixture />, document.getElementById("root"));
<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>

<div id="root"></div>

关于javascript - 停止输入重新渲染 onChange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53321695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com