javascript - 如何避免渲染复选框编号?

标签 javascript reactjs checkbox

我正在尝试根据表单中的复选框创建一个以逗号分隔的饮食限制列表。我设法制作了一个以逗号分隔的列表,但我找不到一种方法来阻止应用程序在单击复选框时呈现数字。请看下面:

class App extends Component {
    constructor() {
        super()
        this.state = {
            firstName: "",
            lastName: "",
            age: "",
            gender: "",
            destination: "",
            dietaryRestrictions: {
                isVegan: false,
                isKosher: false,
                isLactoseFree: false
            }
        }
        this.handleChange = this.handleChange.bind(this)
    }

{…更多代码..}

render() {
        const dietR = []
        return (
            <main>

{…更多代码..}

[Your dietary restrictions: 
                    {this.state.dietaryRestrictions.isKosher ? dietR.push("Kosher"):null}
                    {this.state.dietaryRestrictions.isLactoseFree ? dietR.push("Lactose-Free"):null}
                    {this.state.dietaryRestrictions.isVegan ? dietR.push("Vegan"):null}
                <p>{dietR.join(", ")}</p>
            </main>
        )

请注意屏幕截图中“dietaryRestrictions”后面的“123” enter image description here

最佳答案

问题出在你的渲染方式上:

{this.state.dietaryRestrictions.isLactoseFree ? dietR.push("Lactose-Free"):null}
例如,

dietR.push("Lactose-Free") 将返回数组的长度。所以你可以在这里看到,因为你推送一个项目,你得到长度1,然后你推送另一个,所以现在你有长度2,然后另一个,所以你得到长度3,所以这就是你得到123<的原因。因此,我不会在渲染中更改数组时执行业务逻辑,而是在渲染外部创建一个方法来执行此操作。

你可以说:

const getDietaryRestrictions = () => {
    const dietR = []   
    if(this.state.isKosher)
        dietR.push("Kosher");
    if(this.state.isLactoseFree)
        dietR.push("Lactose-Free");
    if(this.state.isVegan)
        dietR.push("Vegan");
    return dietR;
}

然后你就可以拥有

<p>{this.getDietaryRestrictions().join(", ")}</p>

关于javascript - 如何避免渲染复选框编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59441653/

相关文章:

javascript - Reactjs - 无法修改输入

javascript - 如何在取消选中后获取所有选中的复选框

css - 带有图像的复选框列表

javascript - 响应任何子文件夹获取请求的 Express.js 路由

javascript - 使用 Ractive 在多重选择中设置预选值

Javascript:了解鼠标指针下的所有元素(多个 z 轴层)

javascript - 在 React 中过滤多个值

html - 如何使用 Bootstrap(和 React)居中图像

javascript - 当选择 a 网格行时,复选框变得不可见

javascript - iPhone/iPad 是否支持 mouseout 事件?