【问题标题】:How to change value of a button Typescript / React如何更改按钮 Typescript / React 的值
【发布时间】:2021-03-15 15:09:08
【问题描述】:

我有一个按钮来处理我的语言切换器,它被设置为处理 cookie、url 更改,现在我需要让它来更改我在页面上的翻译。 <img> 标签用于更改国家/地区标志。

                    <button
                        onClick={() => {
                        const locale =
                           router.locale === 'en-us'? 'da-dk': 'en-us';
                            setCookie(locale);
                            {handleOnclick;}
                     router.push(/${locale}`,
                                `/${locale}`,
                                {
                                 locale: false,
                                }); }} >
                        {router.locale === 'en-us' ? (
                            <img src={
                                    menuItems.data.body[5].items[0].image
                                        .url}/> ) : (
                            <img
                                src={
                                    menuItems.data.body[4].items[0].image
                                        .url
                                }/>)}
                    </button>

语言切换功能handleOnClick 工作正常(已测试)这是一个例子:

<button value="da" onClick={handleOnclick}>
    Danish
</button>
<button value="en" onClick={handleOnclick}>
    English
</button>

但现在我需要更改 onClick 的值,因为我只有一个按钮而不是 2 个,但我不知道该怎么做

【问题讨论】:

  • 将语言作为状态存储在组件中。然后你可以使用 {language == "en" ? "English" : "Danish"} handleOnClick 会做 setState({language: event.target.value}) 如果您想了解更多信息,请告诉我,我可以写一个答案
  • 你的意思是像 setLanguage({language: e.target.value}) 一样在我的 handleOnClick 中使用它吗?
  • @GregM 但它不起作用。

标签: reactjs typescript internationalization


【解决方案1】:

您可以声明一个状态并根据之前的值切换其值。

const [language, setLanguage] = useState('en');

// if your project is written in typescript you can use below line of code
// const [language, setLanguage] = useState<'en' | 'da'>('en');

const handleOnclick = () => {
  setLanguage(prevState => (prevState === 'en' ? 'da' : 'en'));
  // it can also be written like this
  // setLanguage(language === 'en' ? 'da' : 'en');
  // But the 1st is more robust when the event happens more frequently.
};

然后这样写按钮

<button value={language} onClick={handleOnclick}>
  {language === 'en' ? 'English' : 'Danish'}
</button>

【讨论】:

  • 感谢@Amir 的帖子,但它确实不适合我的情况。我确实有一个钩子const [language, setLanguage] = useState('en') 并尝试了您的handleOnclick 功能版本,但是您可以看到我不是在文本之间而是在标志之间切换-单击标志语言,url 将切换并且cookie 将被存储。我设置了除了handleOnclick功能之外的所有东西 - 页面翻译,它不起作用,我不知道如何实现它
  • @Eliot 您已经在 onClick 中指定的所有逻辑都可以移动到handleOnclick 函数。你可以在那里设置cookie。您正在使用 cookie 来确定页面的加载方式,这意味着当您执行 const [language, setLanguage] = useState('en') 时,您应该执行 const [language, setLanguage] = useState(getCookieFunction(locale))
猜你喜欢
  • 1970-01-01
  • 2017-12-15
  • 2023-03-05
  • 2014-08-23
  • 2016-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
相关资源
最近更新 更多