RTL на TextInput работает на любом другом рендере - PullRequest
0 голосов
/ 06 ноября 2018

У меня странная проблема с RTL, когда, казалось бы, все переворачивается правильно, кроме TextInput, которые работают ~ 50% времени. Вот рисунок, показывающий проблему, когда я переключаю язык между английским и ивритом:

image

(нажмите для увеличения изображения)

Вот компонент Theme, в который завернуто мое дерево.

import React, {useContext} from 'react'
import {create} from 'jss'
import jssRtl from 'jss-rtl'
import JssProvider from 'react-jss/lib/JssProvider'
import {
  createGenerateClassName,
  jssPreset,
  MuiThemeProvider,
  createMuiTheme
} from '@material-ui/core/styles'
import CssBaseline from '@material-ui/core/CssBaseline'
import {UserContext} from 'src/context/user.js'

const generateClassName = createGenerateClassName()
const plugins = [...jssPreset().plugins]
const dir = locale => {
  const base = locale.split('-') || []
  return ['he', 'ar'].includes(base[0]) ? 'rtl' : 'ltr'
}

const setDir = dir => {
  window.document &&
    window.document.getElementsByTagName('body')[0].setAttribute('dir', dir)
}

export default function Theme({children}) {
  const {locale} = useContext(UserContext)
  const direction = dir(locale)
  const theme = createMuiTheme({direction, useNextVariants: true})
  if (direction === 'rtl') plugins.push(jssRtl())
  setDir(direction)
  console.log('theme', {locale, direction})

  return (
    <MuiThemeProvider theme={theme}>
      <CssBaseline />
      {direction === 'rtl' ? (
        <JssProvider
          jss={create({plugins})}
          generateClassName={generateClassName}
        >
          {children}
        </JssProvider>
      ) : (
        children
      )}
    </MuiThemeProvider>
  )
}

1 Ответ

0 голосов
/ 06 ноября 2018

Дикая догадка: попробуйте добавить пугун jssRtl один раз. Вы добавляете плагин jssRtl на каждый рендер компонента Theme. Это может объяснить, что это не будет работать в 50% случаев, поскольку каждый четный рендеринг означает двойное отражение, что эквивалентно отсутствию отражения.

...