Что такое Context?
Кто-нибудь объясните по-человечески что такое Context в Android. Имею опыт использования, но чувствую неудовлетворенность, так как четкий его смысл ускользает. UPD. Хотелось бы узнать, исходя из вашей практики, как он меняется или не меняется в ходе работы приложения, меняется ли он от активности к активности, от активности к сервису. или он разный у каждого компонента приложения, имеет разные возможности в разных ситуациях.
Отслеживать
69.3k 9 9 золотых знаков 63 63 серебряных знака 120 120 бронзовых знаков
Источник: ru.stackoverflow.com
React Context за 5 минут: что это и как использовать
Android — Что такое Context
React Context для многих стал привычным способом управления состоянием, заменив собой Redux. В этой статье вы узнаете о React Context и научитесь его использовать.
Способы передачи данных между компонентами в React
Рассмотрим работу Context на примере такого дерева. Нижние блоки можно представить как отдельные компоненты:
Допустим, вам нужно добавить свойство какому-то из нижних блоков — это несложно. Но что делать, если это свойство нужно передать соседнему (т. е. отдельному) блоку? Пока единственное решение — передать это свойство блоку-родителю, откуда его можно передать необходимому дочернему блоку.
Если вдруг вам понадобится передать свойство соседнему родителю, вы, опять же, просто переносите его на уровень выше, а потом «спускаете» обратно к нужному блоку.
Решение довольно простое, а главное — рабочее. Но что делать, если нужно передать свойство дальнему блоку?
Для этого нужно «поднять» свойство по всему дереву вверх до самого первого блока, а потом «спустить» обратно к нужному дочернему блоку. Проблема в том, что это свойство будет проходить через кучу промежуточных компонентов. Этот утомительный и трудоёмкий процесс известен как пробрасывание (англ. prop drilling).
9. Flutter — контекст (context). Что такое контекст и примеры его использования
Именно на этом этапе задействуется Context API. Он даёт возможность передавать свойства отдельным блокам дерева без сложных манипуляций с родительскими и дочерними блоками.
В качестве примера использования React Context возьмём вот такой забавный переключатель дня и ночи:
Полный код можно посмотреть здесь.
Создание Context
Вначале нужно сделать так, чтобы всё приложение имело доступ к Context. Для этого в index.js нужно обернуть всё приложение в ThemeContext.Provider . Ещё стоит передать ему свойство value . В нём будет храниться состояние: день или ночь.
import React from «react»; import ReactDOM from «react-dom»; import ThemeContext from «./themeContext»; import App from «./App»; ReactDOM.render( > , document.getElementById(«root») );
Получение свойств от Context через contextType
Пока что в App.js возвращается компонент .
import React from «react»; import Image from «./Image»; class App extends React.Component < render() < return ( ); > > export default App;
Нам нужно с помощью Context менять className в Image.js с Day на Night и обратно. Для этого нужно добавить к компоненту статическое свойство ContextType . Потом, используя интерполяцию строки, нужно передать это свойство в className в объекте .
Теперь свойство className содержит строку из value :
import React from «react»; import Button from «./Button»; import ThemeContext from «./themeContext»; class Image extends React.Component < render() < const theme = this.context; return ( -image image`>> -ball ball`> /> ); > > Image.contextType = ThemeContext; export default Image;
Получение свойств из Context
К сожалению, способ выше работает только с классовыми компонентами. Но благодаря хукам с помощью функциональных компонентов теперь можно сделать всё что угодно. Так что для полноты картины нужно конвертировать имеющиеся компоненты в функциональные и использовать ThemeContext.Consumer , чтобы передать информацию между ними.
Пишем приложение со списком дел при помощи React Hooks
Это можно сделать, обернув элементы в экземпляр . Внутри него нужно предоставить функцию, возвращающую элементы. В данном случае будет использоваться паттерн «render props», который позволяет передать компоненту в качестве children любую функцию, которая возвращает JSX код.
import React from «react»; import Button from «./Button»; import ThemeContext from «./themeContext»; function Image(props) < // Это больше не нужно // const theme = this.context return ( ( -image image`>> -ball ball`> /> )> ); > // Это больше не нужно // Image.contextType = ThemeContext; export default Image;
Примечание тоже нужно обернуть в — в будущем это добавит функциональности кнопке.
import React from «react»; import ThemeContext from «./themeContext»; function Button(props) < return ( ( Switch ? ? )> ); > export default Button;
Вынесение свойств из Context
На текущем этапе в приложении передаётся заранее прописанное значение, но наша цель — переключать день и ночь кнопкой. Для этого нужно переместить в отдельный файл и обернуть его в собственный компонент ThemeContextProvider .
import React, < Component >from «react»; const < Provider, Consumer >= React.createContext(); class ThemeContextProvider extends Component < render() < return > ; > > export < ThemeContextProvider, Consumer as ThemeContextConsumer >;
Примечание Теперь свойство value обрабатывается и в новом файле ThemeContext.js , поэтому обработку этого значения из файла index.js нужно убрать.
Изменение Context
Чтобы подвязать кнопку, сначала нужно добавить состояния state в ThemeContextProvider :
import React, < Component >from «react»; const < Provider, Consumer >= React.createContext(); // Примечание: ещё вы можете использовать хуки, чтобы определять состояние // и преобразовывать его в функциональный компонент class ThemeContextProvider extends Component < state = < theme: «Day» >; render() < return > ; > > export < ThemeContextProvider, Consumer as ThemeContextConsumer >;
Потом нужно добавить метод переключения между днём и ночью:
toggleTheme = () => < this.setState(prevState =>< return < theme: prevState.theme === «Day» ? «Night» : «Day» >; >); >;
После этого нужно изменить значение value на this.state.theme , чтобы свойство устанавливалось из состояния:
render() < return > ; >
Теперь нужно изменить value на объект, содержащий , а также заменить использование value на получение поля theme из объекта. То есть нужно каждое theme заменить на context , а каждую ссылку на theme — на context.theme .
И под конец на кнопку нужно повесить слушатель события onClick . При нажатии кнопки должен вызываться context.toggleTheme — в таком случае будут обновляться Consumer’ы, которые используют состояние от Provider’ов. Код кнопки будет выглядеть примерно так:
import React from «react»; import < ThemeContextConsumer >from «./themeContext»; function Button(props) < return ( ( className=»button»> Switch ? ? )> ); > export default Button
Теперь эта кнопка переключает день и ночь.
Рекомендации к работе с Context
Хоть в этом коде всё работает отлично, всё же есть некоторые аспекты с работой Context:
- Не используйте Context, если он заменяет пробрасывание всего на один-два уровня. Этот инструмент — отличный способ, если нужно распространить состояние на множество компонентов, находящихся в «дереве» далеко друг от друга. Но если вам нужно просто опуститься или подняться на пару уровней, то пробрасывание будет легче и быстрее.
- Постарайтесь не использовать Context для сохранения локального состояния. Например, если вам нужно сохранить введённые в форму данные, то лучше использовать локальное свойство.
- Всегда оборачивайте родителя в Provider’а на как можно более низком уровне — не стоит использовать самую верхушку «дерева».
- Наконец, если вы решили пересылать свойства таким способом, важно помнить про наблюдение за производительностью и рефакторингом. Но это скорее всего не понадобится, если просадки в производительности не будут сильно заметны.
Рефакторинг через классы: вычищаем свой JavaScript-код
Подумываете освоить или освежить знания по React? Тогда держите дорожную карту по React-разработке.
Источник: tproger.ru
Компьютерная программа Reverso Context — отзыв
Reverso context поможет понять не только отдельные слова, но и отрывок текста! Делюсь методикой развития именно разговорных навыков, в чем помогает приложение.
Хочу поделиться мнением о приложении reverso context, которое очень помогает мне в изучении английского языка. И как именно я это делаю расскажу сегодня в этом отзыве.
1. О ПРИЛОЖЕНИИ
Для начала расскажу подробнее об это ресурсе. У меня установлено и приложение на телефоне, и пользуюсь с компьютера через сайт context.reverso.net. По сути дизайн и функции одни и те же, только разные расширения.
Я буду рассказывать сегодня непосредственно о приложении, так как использую его чаще и в разных местах.
Авторизоваться можно с помощью своего гугл аккаунта. Если честно не заметила никаких преимуществ использования приложения с авторизацией, и без авторизации. Единственное, до авторизации он мне навязчиво предлагал войти в аккаунт, мне надоело и я уже авторизовалась. А ну еще у авторизованного аккаунта сохраняется история поиска.
Когда принялась скринить для отзыва, нашла у приложения дополнительные функции, о которых не знала — век живи, век учись. Оказывается у приложения есть функция тренировки слов для запоминания.
Идея хорошая, но исполнение не очень. Просто тут всего 2 упражнения — карточки, и угадайка.
Карточки совсем не эффективные, тебе почему-то дают пример на русском, где уже виден перевод, хотя можно было бы привести пример на английском, чтоб по контексту догадаться, что это может быть за слово. Если не понял, можешь заглянуть уже в перевод. А тут все наоборот.
Но плюс ко всему диктор почему то произносит слово на русском, хотя мы учим вроде как английское слово, разве нет?
Угадайка это когда тебе дают слово, и 4 варианта перевода. Я не воспринимаю это упражнение, потому что тут можно угадать. Пыталась сменить язык диктора, но он не сохраняет эту настройку, и следующее слово снова произносит на русском.
В общем и хорошо что не использовала эту функцию, она ужасна. Для изучения и запоминания слов у меня есть другое предложение Words.
В этом же приложении я всегда использую лишь переводчик текста.
И именно для перевода целых фраз мне нравится использовать reverso context вместо яндекс.переводчика. Дело в том, что он не просто переводит эти слова. он ищет примеры, где были использованы подобные либо похожие выражения.
Однако, не всегда это работает корректно. Например, не всегда примеры, которые даются сопровождаются корректным переводом.
Поэтому приложение лучше пользоваться с умом, если у вас есть свои минимальные знания. Чтоб понять, где вас программа «обманывает,» а где нет)) Очень хорошо распознает разные фразовые глаголы, идиомы, устойчивые выражения и именно за это использую приложение чаще стандартных переводчиков.
Потому что яндекс или гугл переводчики могут буквально переводить по словам фразу (это может быть идиома или устойчивое выражение) и исказить смысл либо вообще выдать какую-нибудь околесицу. А вот reverso выдаст вам уже более сглаженный перевод и передаст общий смысл и примеры приведет.
И кстати, здесь тоже предусмотрен не только английский язык.
2. КАК ИСПОЛЬЗОВАТЬ ДЛЯ ЭФФЕКТИВНОГО ИЗУЧЕНИЯ ЯЗЫКА?
Можно сколько угодно зубрить грамматику, но от этого вы не заговорите на языке. Я придумала для себя определенную систему, которая помогает мне разнообразить мои разговорные навыки, хочу поделиться с теми, кто так же ищет для себя новые методы изучения.
Что нужно сделать?
- Вам нужно для начала выбрать какой-нибудь не сложный сериал, желательно чтоб серий было не много и они были не длинные. Если вам нужен язык для работы или учебы, то выбирайте сериал близкий к вашей профессии. Например, вы врач, выбирайте сериалы на медицинскую тематику: Доктор Хаус, Клиника и другие. но тоже в зависимости от вашего уровня владения.
- Начинайте смотреть сериал с английскими субтитрами и выписывайте непонятные выражения и фразы в тетрадь прямо из субтитров.
По началу их будет очень много, это нормально. Но потом вы привыкните, будете запоминать их и далее с каждой серией у вас их будет меньше и меньше.
- Выписанные выражения и фразы разбираете в приложении reverso context.
По началу я выписывала целые предложения, потому что слова вроде бы там все знакомые но в целом смысл предложения не понятен. Только потом уже научилась видеть словосочетания, которые наверняка являются фразовыми глаголами, идиомами или устойчивыми выражениями.
Сериалы ими очень напичканы, и, кстати, а тем, кому нужна профессиональная лексика будут изучать и ее тоже.
- После того, как разберете каждое выписанное слово, постарайтесь их выучить.
Для многих это самое сложное, но тут я для себя тоже использую определенный метод — делаю карточки. Это старомодный метод, учитывая сколько сейчас разных приложений для изучения слов, но! Использую карточки только для фраз. Фразы тренировать в приложении тяжело, к тому же иногда нужен контекст чтоб понять смысл.
А так, когда я делаю карточку с фразой, я частично могу запомнить это слово. На оборотной стороне выписываю из приложения реверсо примеры, где в контексте используется эта фраза и пытаюсь выучить. Для разговорной речи полезным будет сразу попытаться применить фразу.
Например, я учу определенную группу фраз, я их не только произношу вслух, но и пытаюсь придумать предложение с этой фразой. Возьмем допустим фразу: get changed (переодеваться), значит можно сказать так: I got changed then i bought my new dress.
Кстати не стоит ограничиваться одним примером, не всегда в контексте эта фраза означает именно переодеваться, если фраза относится к ситуации, то это может означать, что ситуация изменилась. Поэтому старайтесь использовать и рассматривать как можно больше примером, и каждый раз когда повторяете и пытаетесь запомнить выражения так же придумывайте разные примеры и желательно произносите это вслух.
Поверьте, когда настанет время слова сами посыпятся из вас и вы удивитесь, что вы умеете говорить. Так же после повторения всех фраз, можно разложить перед собой карточки и составить рассказ, в который нужно вставить новые фразы, это сложнее, но очень эффективно! Кстати, не обязательно рассказ, можно вообразить диалог с кем-то, но вам придется выступить в двух лицах))
В общем подключите воображение и все будет запоминаться легко, без зубрежки. Вы удивитесь, когда смотря серию десятую вы уже будете понимать практически все, кроме некоторых отдельных слов и выражений, которых еще нет в вашей тетрадочке))
И самое главное в этом регулярность, к сожалению карточки занимают много времени, можете их не делать, но тренировать фразы нужно. И работать с каждой серией нужно, со временем у вас будет уходить на это намного меньше времени, но в начале придется все таки потрудиться. Лучше всего конечно смотреть сериал каждый день, однако ввиду время и трудо затрат можно делать через день. Затем через день по 2 серии, а в тот день, когда не смотрите сериал, можно просто повторять фразы и выражения.
Вот вроде и все, надеюсь метод будет кому то полезен, мне он помог развить речевые навыки. Буду рада услышать и другие интересные методики.
ЗАКЛЮЧЕНИЕ
Приложение не идеальное, у него есть недостатки, но если пользоваться с умом — оно станет незаменимым помощником в изучении языка!
Источник: irecommend.ru
Что такое контекст Spring и как его создать?
Контекст (а у него есть даже интерфейс — org.springframework.context.ApplicationContext ) — это некоторое окружение, в котором работает приложение на Spring Framework. Страшные аббревиатуры DI, IoC — это всё про него. Собственно, контекст создаёт и хранит экземпляры классов вашего приложения, определяет их зависимости друг с другом и автоматически их задаёт.
Безусловно, для того чтобы Spring создал контекст с экземплярами классов, ему нужно предоставить дополнительную информацию — мета-данные, из каких классов/объектов состоит ваше приложение, как они создаются, какие у них есть зависимости и т. д.
Итого: Spring Context + мета-данные = работающее приложение.
Где найти контекст?
Контекст является ключевой функциональностью Spring и лежит в maven-зависимости spring-context (на момент написания — org.springframework:spring-context:5.1.4.RELEASE ). Обычно эта зависимость является транзитивной для остальных проектов Spring. И если вы, например, подключаете spring-boot-starter, то она подключится автоматически, и не нужно думать про то, где её взять.
Но если вы хотите попробовать «голый» Spring, т. е. только ту часть, которая называется IoC-контейнер, то достаточно подключить лишь spring-context.
Итого: подключите org.springframework:spring-context:5.1.4.RELEASE .
Какие бывают контексты и как их создать?
У интерфейса ApplicationContext есть большое количество реализаций: — ClassPathXmlApplicationContext ; — FileSystemXmlApplicationContext ; — GenericGroovyApplicationContext ; — AnnotationConfigApplicationContext ; — и даже StaticApplicationContext ; — а также некоторые другие.
Они отличаются друг от друга именно тем, каким способом задаются мета-данные и где хранится эта конфигурация. Например: — ClassPathXmlApplicationContext — метаданные конфигурируются XML-файлом(-ами) и они лежат в classpath, т. е. в ресурсах модуля; — FileSystemXmlApplicationContext — метаданные тоже конфигурируются XML-файлом(-ами), но они находятся где-то в файловой системе, например, /etc/yourapp/spring-context.xml ; — AnnotationConfigApplicationContext — метаданные конфигурируются с помощью аннотаций прямо на классах.
Современным способом конфигурирования считаются аннотации ( AnnotationConfigApplicationContext ), дальше будем создавать именно их.
Приведём пример создания такого контекста в методе main:
Итого: создаём контекст.
Следите за новостями, оставляйте комментарии и посмотрите программу курса «Разработчик на Spring Framework», вдруг захочется погрузится полностью!
Источник: otus.ru