在输入类型上使用React将值null转换为“”

时间:2019-05-19 16:09:31

标签: javascript reactjs

在我的应用程序中,我有一些用户需要填写的字段。当该字段为空时,它显示值为null。当我在输入字段中输入内容时,它假定相同的值没有问题。

我的问题是当我有一个包含信息的输入字段时,当我删除它的值时,这就是它的显示内容:

enter image description here

您可以看到该值的确为空。这是通过使用以下代码行在此方法上完成的:

handleChange(event, index) {

    if (event.target.value == '') {
        event.target.value = null;
    }

       (...)
   }

但是,当将此名称发送到我的API时,该名称显示为不是“ null”而是“”,

enter image description here

这是我打印此值的方式:

            window.alert("test->-> " +JSON.stringify(jsonPlayer.playerName))

我从中得到的结论是JSON.stringify将我的空值转换为“”,我希望该值为空而不是“”。 发送到我的API时也会发生这种情况,因为我也需要对对象进行字符串化:

 return fetch(url, {

        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*'
        },
        body: JSON.stringify({
            player: param

        })

有没有任何方法可以将stringify放置的“”转换为null而不使用连续的if子句?

谢谢。

使用更多代码更新:

初始状态:

this.state = {
        playerList: {
            player: [
                {
                    idPlayer: null,
                    playerName: null,
                    broadcastChannel: null,
                    clusterName: null,
                    playerAlias: [
                        {
                            name: null
                        }
                    ]
                }
            ]
        },
        newAlias: null
    }

完全句柄更改方法:

handleChangeFirstChild(event, index) {

    if (event.target.value === "") {
        this.state.playerList.player[index].playerName=null;
    }

    const player = [...this.state.playerList.player]

    player[index] = {
        ...player[index],
        [event.target.name]: event.target.value
    }

    window.alert("player's name no JSON.stringify: " + player[index].playerName)
    window.alert("player's name with JSON.stringify: " + JSON.stringify(player[index].playerName))

    this.setState(prevState => ({
        ...prevState,
        playerList: {
            ...prevState.playerList,
            player: [
                ...player,
            ]
        }
    }))
}

第一张照片:

enter image description here

第二次打印:

enter image description here

为清楚起见,api收到什么:

enter image description here

1 个答案:

答案 0 :(得分:0)

尝试避免使用event.target.value = null

    if (event.target.value === '') {
        this.setState({...jsonPlayer,playerName: null})
        // if no render needed:
        // jsonPlayer.playerName = null;
        return;
    }
...

在这种情况下:

JSON.stringify(jsonPlayer.playerName) // 'null'