Javascript 替换韩元';获取时不能处理字符串,但硬编码时会

Javascript 替换韩元';获取时不能处理字符串,但硬编码时会,javascript,replace,react-native,Javascript,Replace,React Native,我正在尝试使用将“8888888888”转换为“(888)888-8888”的功能格式化电话号码: 当我的json是硬编码的时候,它就可以工作了,但是当它从服务器获取时,没有任何变化,也没有错误 我尝试了控制台日志记录“typeof”,但在这两种情况下,它们都以字符串的形式返回 我尝试在组件装载后将状态设置为更新,如下所示: componentDidMount (){ var formatPhone = phoneFormat(this.props.profile.phone) this

我正在尝试使用将“8888888888”转换为“(888)888-8888”的功能格式化电话号码:

当我的json是硬编码的时候,它就可以工作了,但是当它从服务器获取时,没有任何变化,也没有错误

我尝试了控制台日志记录“typeof”,但在这两种情况下,它们都以字符串的形式返回

我尝试在组件装载后将状态设置为更新,如下所示:

componentDidMount (){
  var formatPhone = phoneFormat(this.props.profile.phone)
  this.setState({phone: formatPhone})
},
还尝试了直接内联调用函数

提取功能:

fetchProfile() {

    fetch(PROFILE_API) 
        .then((response) => {
            return response.json();
        })
        .then((json) => {

            console.log(JSON.stringify(json))

            this.setState({
                profile: json
            });

        })
        .catch((error) => {

            this.setState({
                loading: 3
            });
        });


},
然后我将状态作为道具传递到组件视图。

我将执行以下操作:

  • 在多个浏览器和可能不同的机器上测试它,以验证这不是特定于开发人员机器的问题

  • 尝试使用Js的string.replace(like)的另一个Regex对象,它可以提供所需的结果


  • 祝你好运。

    由于代码不是完整的版本,我能想到的是:

    您的状态“phone”实际上并没有直接绑定到状态“profile”,因为您在componentDidMount()中设置了“phone”值,并且它只运行一次。运行componentDidMount()后,调用fetch()时,设置状态“profile”不会触发状态“phone”的更改


    如果是这样的话,我的建议是去掉“phone”,在呈现布局时只需调用phoneFormat(this.state.profile.phone),正如这里提到的()

    这是因为我的同事在数据库中的数字意外地是9个字符而不是10个字符。Oops.

    能否显示服务器调用和成功函数?从服务器返回的JSON是什么样子的?值得使用断点甚至简单的console.log检查代码是否实际到达了该方法调用。我希望如果你没有得到错误,这意味着代码甚至没有被执行,代码被执行了。我在替换前后为“phone”功能添加了控制台日志。在这两种情况下,手机启动相同。第二个日志显示获取的版本没有更改,硬编码版本的更改是正确的。数字的JSON是“phone”:“888888888”,引号中是“phone”。我内联尝试过:
    ,但仍然没有看到更改。可能要添加错误处理,确保您的读取函数获得有效数据:)。@KoebmandSTO您能为我得到的函数演示一个示例吗?我很想知道在那种情况下如何操作。检查伪代码中的长度:readPhoneNumber():if(readNumber.length()!=10)raiseError“这不是电话号码”否则返回readNumber。如果read函数也用于读取其他内容,您可能希望在使用数字的情况下对此进行检查,也可能有人输入字母等。您可能还希望检查所有的是数字。
    fetchProfile() {
    
        fetch(PROFILE_API) 
            .then((response) => {
                return response.json();
            })
            .then((json) => {
    
                console.log(JSON.stringify(json))
    
                this.setState({
                    profile: json
                });
    
            })
            .catch((error) => {
    
                this.setState({
                    loading: 3
                });
            });
    
    
    },