首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量不会更新组件

变量不会更新组件
EN

Stack Overflow用户
提问于 2018-12-06 08:49:56
回答 1查看 45关注 0票数 0

我要学一门外语,然后翻译它。这是我的第一个react项目,问题是finalText没有被翻译更新。

我可以在console.log(translation)函数中做一个googleTranslate,它可以工作。当我试图将它赋值给它不会显示的函数的作用域上的finalText变量时,它始终是空的。

代码语言:javascript
复制
import React from 'react';

class CardComponent extends React.Component {
    render() {
        let data = this.props.data;


        let truncated = data.truncated;
        var test = new String(truncated);
        console.log(test);
        var finalText = '';

        var googleTranslate = require('google-translate')('apikey');
        googleTranslate.translate(data.text, 'en', function(err, translation) {
            finalText = translation;
          });

        return (
            <div>
                <div className="card-panel grey lighten-5 z-depth-3 hoverable thin">
                    <div className="row valign-wrapper">
                        <div className="col s2">
                            <img src={data.user.profile_image_url} alt={data.user.name} className="circle responsive-img" />
                        </div>
                        <div className="col s10 left-align">
                        {(() => {
                        if (test=='true') {
                        return (
                            <span className="black-text"> {data.extended_tweet.full_text}</span>
                        )
                        } else {
                        return (
                            <span className="black-text">translated text: {finalText}</span>
                        )
                        }
                    })()}
                        </div>

                    </div>
                    <div className="row valign-wrapper right-align chip hoverable">
                    {new Date(data.created_at).toLocaleTimeString()}
                    </div>
                    <div className="row valign-wrapper right-align chip hoverable">
                        <a href={`https://twitter.com/${data.user.screen_name}`} target="_blank">{`@${data.user.screen_name}`}</a>
                    </div>
                </div>

            </div>
        );
    }
}

export default CardComponent;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 09:01:27

主要问题是转换是异步进行的。您调用Google,然后不再等待,剩下的代码将一直运行直到Google响应。然而,当谷歌做出回应时,已经太晚了,你已经把一切都做好了。控制台日志工作的原因是因为它也是异步的!它比Google慢,所以它发生在你得到结果之后。

幸运的是,有反应,有一个简单的解决办法。我们可以在组件挂载时启动您的代码,然后当Google响应时,我们可以告诉React再次进行渲染。在这里了解更多关于https://reactjs.org/docs/state-and-lifecycle.html的信息

代码语言:javascript
复制
class CardComponent extends React.Component {
    constructor() {
        super(props);
        this.state = {finalText: ''};
    }

    componentDidMount() {
        let data = this.props.data;
        let truncated = data.truncated;

        var googleTranslate = require('google-translate')('apikey');
        googleTranslate.translate(data.text, 'en', function(err, translation) {
            // by calling set state, React will know to render again
            this.setState({
                finalText: translation
            });
        });
    }

    render() {
        return (
            // all the html you want to render in here
            <p>this.state.finalText</p>
        );
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53647639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档