请教一个有关 react state 设计和使用的问题:如何更新了 state,但不触发页面更新,直到下一次重新打开网站? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yazoox
V2EX    React

请教一个有关 react state 设计和使用的问题:如何更新了 state,但不触发页面更新,直到下一次重新打开网站?

  •  
  •   yazoox span title="2020-10-26 16:41:47 +08:00">2020-10-26 16:41:47 +08:00 2713 次点击
    这是一个创建于 1809 天前的主题,其中的信息可能已经有所发展或是发生改变。

    技术用的是 react, react-redux, and react-saga 那一套。

    现在要做多语言支持,所以,用户设置里面有一项,语言设置 language settings. 默认是当前浏览器的语言 locale 。但是用户可以修改成自己想要使用的任何语言,比如 日文,俄语,中文,等等。

    问题来了,在 settings 页面,用户选择了自定义的 locale 后,这个值我们是会保存下来的,是会更新 state 状态的,然后页面就刷新了。而且,刷新是多个页面刷新,不仅仅是当前设置页面。可是,我们不想这样,而是保持不变。直到用户下一次打开网站,重新加载时,发现 locale 使用了自定义的,然后使用新的语言。(因为有些功能,必须网站重新打开,初始化时加载,其它语言,才能够成功,也就是说,即使实时刷新页面,这个刷新是不完整的,可能会出问题)

    想过添加一个临时的 flag,如果修改了语言设置,则设置为 1. 然后 react 刷新时,如果发现为 1,语言不变,还是上次的(那还得有添加一个 readonly 的 state,记录网站打开时的那个语言)。而且,state 的是 react engine 自动刷新的,没有太好的办法控制它。

    特来请教一下大家,有没有比较成熟 /合适的方法。

    10 条回复    2020-11-12 11:47:32 +08:00
    murmur
        1
    murmur  
       2020-10-26 16:42:51 +08:00
    那为什么要用 state 呢,做成常量不好么,每次更新只在后台变更配置,做成 state 就是要联动更新
    shintendo
        2
    shintendo  
       2020-10-26 16:43:50 +08:00
    缓缓打出了一个问号
    vision1900
        3
    vision1900  
       2020-10-26 16:47:34 +08:00
    SPA 怎么做到多页面的,在线等
    yhxx
        4
    yhxx  
       2020-10-26 16:50:16 +08:00
    语言存个 localstorage 不行吗?
    source
        5
    source  
       2020-10-26 17:01:31 +08:00
    cookie,localstorage,你需要持久化存储,跟 react 跟框架没有任何关系,你写 jq 也是这个思路来实现
    source
        6
    source  
       2020-10-26 17:02:49 +08:00
    详细一点就是,i18n 配置存在 localstorage 里,页面 init 的时候读取 localstorage 中的语言配置就完事了
    996icu007007
        7
    996icu007007  
       2020-10-26 17:10:18 +08:00
    @vision1900 多页面打包吗? 配个 webpack entery 啊 网上搜多的是
    acfe
        8
    acfe  
       2020-10-26 18:05:28 +08:00
    用 localstorage 啊,或者把 locale 字段存到数据库里,下一次打开,再去调接口拿这个字段
    GzhiYi
        9
    GzhiYi  
       2020-10-27 09:10:56 +08:00 via iPhone
    单纯的 state 是没法持久化的
    baxtergu
        10
    baxtergu  
       2020-11-12 11:47:32 +08:00
    把语言切换的状态做成持久化的,只在加载应用的时候读取一次然后递给应用最外层的 Provider 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5619 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 06:34 PVG 14:34 LAX 23:34 JFK 02:34
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86