Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 希望高阶组件在语言更改后重新呈现错误消息_Reactjs_Internationalization - Fatal编程技术网

Reactjs 希望高阶组件在语言更改后重新呈现错误消息

Reactjs 希望高阶组件在语言更改后重新呈现错误消息,reactjs,internationalization,Reactjs,Internationalization,我根据编写了一个高阶组件(HOC)。它包装了一个纯组件,用于渲染某种类型的图像 My HOC获取一个验证器函数作为属性。当输入值更改时,它调用验证器(newValue)。validator()返回错误消息或空白字符串。validator()方法反过来可以调用一个方法,该方法根据用户设置将错误消息转换为不同的语言 我的问题是,如果用户在显示错误消息后更改了语言,React不会以新选择的语言重新呈现错误消息,因为只有当validator()返回不同的值时才会呈现错误消息,并且只有当它所包装的输入值更

我根据编写了一个高阶组件(HOC)。它包装了一个纯组件,用于渲染某种类型的图像

My HOC获取一个验证器函数作为属性。当输入值更改时,它调用验证器(newValue)。validator()返回错误消息或空白字符串。validator()方法反过来可以调用一个方法,该方法根据用户设置将错误消息转换为不同的语言

我的问题是,如果用户在显示错误消息后更改了语言,React不会以新选择的语言重新呈现错误消息,因为只有当validator()返回不同的值时才会呈现错误消息,并且只有当它所包装的输入值更改时才会调用validator()。除非我将该语言作为HOC的属性,否则HOC无法知道该语言已发生了变化

我最初编写HOC是为了接受所选语言作为属性,然后翻译它的validator()属性返回的任何错误消息,但我认为这有一种“味道”,因为混合了各种顾虑。我认为,特设委员会不应该知道当前的语言,因为这不是它关心的问题。每个validator()方法都应负责以所选语言生成错误消息。这有意义吗

我想到的一个技巧是,让changeLanguage()处理程序通过迭代子DOM中的所有输入,取消设置,然后将它们重置为当前值,从而认为所有输入都有更改。这将迫使所有validator()方法再次运行,这一次将以新选择的语言生成错误消息。当然,这是一种黑客行为。我会把一个反模式换成另一个

我知道改变语言是一种边缘现象。我打算根据Accept language HTTP头设置语言,但我读到这是不鼓励的,因为Accept language不能总是被用来反映用户的实际需求。你可以用它作为第一个猜测,但如果有不止一个选择,你必须给他一个改变的方法。这就打开了潘多拉魔盒


有什么建议吗?

我可以回答我自己的问题


HOC呈现错误消息。我可以将该部分分解为它自己的React组件,并赋予它language属性,以便在语言更改时重新渲染。轻松点

我可以回答我自己的问题

HOC呈现错误消息。我可以将该部分分解为它自己的React组件,并赋予它language属性,以便在语言更改时重新渲染。轻松点