🎉 Представляем @akalli/components умные компоненты для React Native с CSS стилем like

@akalli/components — это фреймворк для React Native, умных компонентов и валидации форм. Можно считать его дочерним продуктом идей chakra-ui/native-base со стилизованными компонентами.

Хватит говорить, просто на примере все понятно, lol :).

import { Text, View } from "@akalli/components";

export const Component = memo((props: IPropsHeader) => {
  return (
    <View _style={styles.view}>
      <Text _style={styles.text}>My text here</Text>
      <Text _style="color: blue;">Inline styles support too!</Text>
    </View>
  );
});

const styles = {
  view: `
    height: 100px;
    background-color: red;
    width: 100%;
  `,
  text: `
    color: white;
    font-size: 24px;
  `,
};
Вход в полноэкранный режим Выход из полноэкранного режима

Вы можете поместить ваш стиль inline или вызвать его из const или object. Под капотом все преобразуется в стили-компоненты.

Установка

npm install @akalli/components styled-components react-native-svg yup

Использование

специальные реквизиты, связанные с этой либой компонентов, обозначаются _. Каждый раз, когда вы видите prop с _, это означает, что это одна из наших библиотек, все остальное — то же самое, что и в react-native. Конечно, благодаря typescript вы можете просто нажать _ в компоненте, чтобы увидеть, какие резервы использовать.

Компоненты

Специальные представления

  • View — то же самое, что и View в RN.
  • HSection и VSection — такие же представления, но с заданной ориентацией, а также более семантичные.
  • ScrollView — То же, что и ScrollView в RN.
  • Center, HCenter и VCenter — представления с различным стилем централизации.
  • Show — представление с логикой условия, хорошо подходит для более очевидного и семантического условного рендеринга, включает _fallback prop для ложного случая.

Списки

  • FlatList — То же, что и FlatList.
  • SectionList — То же, что и SectionList.

Ввод

  • TextInput — То же, что и TextInput в RN.
  • Input — Вход, который работает с хуком валидации useMyForm (который имеет интеграцию с yup).

Другие

  • Header — Более простой способ реализовать заголовок с иконкой.

Теминг и варианты

const initialTheme = {
  colors: {},
  fontSizes: {},
  variants: {
    viewBgRed:`
      background-color: red;
    `
  }
}

<MyThemeProvider theme={initialTheme}>
  <View _variant='viewBgRed'>
   <Text>Hey coders!</Text>
  </View>
</MyThemeProvider>
Вход в полноэкранный режим Выход из полноэкранного режима

Хуки

  • useMyStyle — Этот хук используется для динамических стилей. Он позволяет динамически изменять стили, не вызывая повторного рендеринга.
// This will only be called again when lang changes.
 const changeLangButtonStyle = useMyStyle(styles.changeLangButton(lang), [
    lang,
  ]);

Войти в полноэкранный режим Выйти из полноэкранного режима
  • useMyStyledComponent — С его помощью вы можете создавать свои собственные компоненты, используя нашу философию.

  • useMyTheme — Это позволяет вам получить доступ к нашей теме. Для ее использования необходимо обернуть ваше приложение нашим MyThemeProvider и передать theme prop.

  • useMyForm — Этот хук используется для валидации формы и имеет интеграцию с yup.

const schema = yup.object().shape({
  name: yup
    .string()
    .min(5, "put at least 5 letters")
    .required("Name is required"),
  email: yup.string().email("Not valid email").required("Email is required"),
});

 const { register, handleSubmitForm } = useMyForm({ schema });

  <Input
          _variant="inputForm"
          _register={register}
          _key="name" // This key must be the same as yup schema
          _label="Name"
          _placeholder="Seu nome"
          _customStyles={styles.inputDataClient}
          _colors={{
            main: "#7a7a7a",
            error: "#f5427b",
          }}
        />
       ...
Войти в полноэкранный режим Выход из полноэкранного режима
const styles = { 
  inputDataClient: {
    label: `
      font-size: 20px; 
      text-align: left;

    `,
    input: `
      font-size: 18px; 
      padding-left: 15px; 
      height: 40px;
      border-radius: 8px;
      color: #A7A7A8;
    `,
    container: `
      margin-top: 20px; 
      align-items: flex-start;
    `,
  },
}
Войти в полноэкранный режим Выход из полноэкранного режима

Этот проект независимый, но также является частью гораздо большего пакета шаблонов expo с простой установкой в npx.

Встречайте: @akalli/create-akalli-app

Все это с открытым исходным кодом на GitHub. Проверьте, и если у вас возникнут сомнения или проблемы, вы можете создать проблему или связаться со мной по электронной почте dsilva@akalli.com.br.

Оцените статью
devanswers.ru
Добавить комментарий