Трикотажная одежда для дома и отдыха для мужчин и женщин, в интернет магазине Ирис — домашний трикотаж!

Домашний трикотаж от производителя в Иваново, в интернет-магазине «Ирис — домашний трикотаж» Трикотаж дешево, купить ночные сорочки, купить туники, купить трикотаж

Разное

Как реагировать если: Как реагировать, если подопечный рассказывает нечто драматичное

Содержание

Как реагировать, если подопечный рассказывает нечто драматичное

Наши подопечные – зачастую люди нелегкой судьбы. И бывает, что подопечный делится с волонтером какими-то своими тяготами или горестями. Как волонтеру в рамках своей компетенции правильно реагировать на это, не обидев и не подорвав доверие подопечного? Рассказывает психолог, волонтер групп переписки с заключенными, Можайской колонии и в приюте в Зюзино Добровольческого движения «Даниловцы» Екатерина Азисова.

Смотрите видео или читайте текстовую расшифровку ниже:


Как реагировать, если подопечный рассказывает нечто драматичное

С данной проблемой можно столкнуться в любом учреждении, где мы работаем с детьми. Например, в больнице ребенок может очень переживать из-за тяжелого заболевания. И для него может быть очень важно проговорить это, особенно, если это онкологическое заболевание, если это психиатрическое заболевание. С этим можно столкнуться и в социальном приюте. В социальный приют дети могли попасть из острой обстановки, и она для них еще очень болезненна, им очень важно о ней говорить. Поэтому вполне можно с этим столкнуться. К этому нужно быть готовым.

Часто, когда кто-то начинает говорить нам что-то такое очень тяжелое и болезненное – на тему смерти, на тему насилия и так далее – нам очень хочется от этого отгородиться, потому что нас это пугает. Мы пытаемся от этого отойти: “Да ладно, это же все позади!.. Теперь-то все хорошо, ты теперь здесь!.. Ну, у тебя еще много всего хорошего в жизни будет…” , и все в таком плане. Ну, мы обесцениваем переживания человека. Лучше этого не делать. Лучше постараться позаботиться, сделать то, что мы можем сделать для него здесь и сейчас. Но важно проговорить это ребенку: мы можем его выслушать. Конечно, человек, который не является специалистом-психологом, просто волонтер не может оказать подопечному квалифицированную помощь, но он может хотя бы его выслушать.

Важно постараться сохранить самообладание, не показывая ужаса: “Какой кошмар! Что в жизни, бывает, с чем ты столкнулся..” Потому что, например, в наркологическом диспансере подростки могут таким образом еще и проверять: “А как ты меня примешь, если ты узнаешь, что я такой?” И начнет рассказывать о каких-нибудь своих похождениях, о том, что вообще делал, что вообще происходило на их сходках, и это могут быть страшные вещи. Они смотрят: “Если я не такой вот, как сейчас, хороший, который сидит с тобой на встрече? А если я другой? Как ты будешь ко мне относиться?” Ребенку очень важно принятие. Мы можем спросить: “А какой реакции ты бы от меня хотел? Чем я могу тебе сейчас помочь? Что я могу для тебя сделать?” Бывает немножко непонятно: то ли ребенок просто хочет это сказать, то ли ребенок хочет, чтоб мы ему чем-то помогли. Мы здесь можем обозначить, в общем-то, свои возможности. Потому что выслушать мы можем, дать обратную связь мы можем, а оказать помощь, как психолог – нет, это мы не можем. И здесь мы можем спросить: “А ты знаешь, куда бы ты мог с этим обратиться? А есть ли у тебя человек, с которым ты мог об этом поговорить?”


Может быть, ребенок не знает, что в учреждении есть психолог
. Или что есть бесплатные телефоны доверия – например, если это больница. И мы, если мы их не знаем, например, можем в следующий раз ему сказать этот телефон. Сказать, объяснить, что: “Ты знаешь – это безопасно, это абсолютно анонимно. Никто не узнает – кто ты, где ты, никто тебя не выследит,” – потому что на эту тему могут быть переживания. Вот здесь тебе могут помочь, потому что я просто не умею, я не могу. Я могу тебя поддержать, побыть с тобой рядом. Но я просто не могу что-то другое сделать для тебя. И уже дальше действовать в зависимости от запроса ребенка.
Самое главное здесь – именно быть рядом, именно поддерживать, не осуждать и принимать.


Мы можем давать обратную связь о своих чувствах потом, когда ребенок выскажется, но очень осторожно
: “Ты знаешь, вот у меня сейчас было такое чувство гнева к этому человеку, когда ты рассказывал. У меня было такое чувство горечи.” Чтобы как-то “заземлиться”, вернуть ребенка “вот сюда”, можно обратиться к чувствам: “Какие у тебя сейчас были ощущения в теле, когда ты это рассказывал? Вот у меня было такое ощущение – “комка в горле”. А что ты чувствовал, когда ты сейчас вот об этом говорил?” И здесь может такое быть, что (ребенок ведь говорит о чем-то болезненном для него) он может, например, сказать: “Вот моя мама – она такая “гадина”, – или что-то еще покрепче, – я не смогу ее простить”. Ну здесь категорически просто нельзя останавливать и говорить: “Как ты можешь так говорить о твоей матери?! Какая бы она ни была – она твоя мама, она тебя родила. Да как ты, вообще, смеешь?!” Здесь ребенок сейчас очень переживает. У него эта агрессия в такой форме выходит. Всё потом. Потом, когда он, может быть, с кем-то будет, со специалистом прорабатывать, однажды – это принятие. Это пройдет. Сейчас ему важно выразить вот эту вот ненависть, вот эту вот обиду, и мы можем ему помочь понять то, что он чувствует, если будем говорить ему о его чувствах. Он как раз через это и увидит, что мы его поняли: “Должно быть, ты был очень обижен. Тебе, наверное, было очень тяжело. Тебе было больно, наверное, ты переживал”. Здесь лучше не скатываться к жалости: “Какой ты бедненький, какой ты несчастненький”, а именно сочувствовать. Но будет ложью, если мы скажем: “Я знаю, каково тебе было.” Нет, мы не знаем, какого ему было. У нас не было именно такого же опыта. У нас мог быть похожий, но именно такого – не было. Каждый человек по-своему переживает горе, каждое событие он переживает по-своему: “Я могу предположить, что тебе было очень тяжело. Я могу представить, у меня было нечто похожее,” – “Но я не знаю, какого тебе было тогда,” – потому что он поймет эту ложь, и он может в этот момент закрыться.

И почему, опять же,

важно не отвергать и сразу не говорить, что: “Так, со мной ты об этом говорить не будешь. Так, ты вот иди к психологу» – сразу. Потому что он, может быть, первый раз открылся. Вот он почему-то доверился этому волонтеру, потому что глаза у него какие-то, выражение лица… Он ему поверил, ему показалось, что: “Вот этому человеку я могу рассказать.” И потом он может закрыться. И начать бояться людей и носить в себе вот эту вот травму – вот эту вот, очень тяжелую. Потому что он увидел, как человек очень болезненно ему ответил, когда ему очень нужна была поддержка. Потому что бывает, важен не совет, бывает, важно именно дать высказаться собеседнику. Именно все проговорить и прожить, когда я это говорю. Нужно попробовать поставить себя на место этого ребенка, попробовать понять, что он чувствовал, и что бы нужно было бы мне, если бы я был в таком положении. Очень важно не отвергать человека с этим, как бы нам ни было тяжело. Ну конечно, мы не можем дать больше, чем в наших силах. Но хотя бы то, что мы можем дать – просто выслушать, побыть рядом – наверное, это сможет каждый волонтер.

Материал подготовлен в рамках “Человек – человеку” – просветительского проекта Школы социального волонтерства в формате видео-блогов.

Советы психологов — Советы психологов

Правила для родителей, препятствующие употреблению алкоголя и наркотиков

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

1. Будьте реалистичны при установлении правил, объясните причины их неукоснительного соблюдения. В чем они состоят и какое поведение ожидается. Объясните последствия нарушения правил: какое будет наказание, как оно будет применяться, и сколько времени будет действовать и что будет достигаться этим наказанием.

2. Будьте последовательны. Объясните ребенку, что правило не употреблять алкоголь и наркотики остается в силе постоянно — дома, в гостях, на улице, где бы ребенок ни был.

Будьте разумны и последовательны. Не добавляйте новых последствий, которые не обсуждались до того, когда правило было нарушено. Избегайте нереалистичных угроз типа «Отец убьет тебя, когда придет…». Старайтесь реагировать спокойной и осуществите наказание, которое ребенок ожидает получить за нарушение правил.

Как родители, мы должны иметь точную и современную информацию о наркотиках с тем, чтобы передать ее детям. Нашего мнения о том, что «это ужасно, губительно», недостаточно, чтобы помочь ребенку. У нас есть знания об обычных лекарствах, их действии на психику и человека — это уже повод для разговора и обсуждения с детьми. Хорошо информированные родители способны лучше распознать симптомы проблем, связанных с алкоголем или наркотиками, если они появляются у ребенка.

Родитель должен:

1. иметь представление о типах наркотиков и алкоголя, наиболее распространенных в настоящее время, и опасностях, связанных с каждым из них;

2. уметь распознавать средства, приспособления и детали для употребления наркотиков;

3. знать уличные, жаргонные названия наркотиков;

4. знать, как они выглядят;

5. знать косвенные признаки употребления алкоголя и других психоактивных веществ и быть начеку в отношении изменений поведения и внешнего вида ребенка;

6. знать, как оказать помощь, если Вы подозреваете, что Ваш ребенок употребляет алкоголь или наркотики.

Причины и признаки

Почему люди употребляют наркотики?

· Потому что доступно (очень выгодный бизнес играть на человеческих слабостях).

· Потому что подчиняемся давлению, не умеем сопротивляться.

· Потому что нет своего решения.

· Потому что не хватает критического мышления.

· Потому что не умеем справляться со стрессом.

· Потому что кажется безобидным, неопасным.

· Потому что не понимает своих проблем, в частности не умеем общаться.

· Потому что не умеем оценивать степень риска, не умеем заботиться о себе.

· Потому что не умеем понять свои чувства и чувства других и тд.

Когда это можно заметить?

· Когда нарастает безразличие ко всему, что было интересно.

· Когда видим уходы из дома и прогулы в школе по непонятным причинам.

· Когда видим чрезмерно болезненную реакцию на любую критику.

· Когда видим избегание контакта с домашними.

· Когда резко снизилась успеваемость в школе.

· Когда просьба дать денег на одну цель постоянно подменяется другой.

· Когда из дома пропадают ценности.

· Когда по телефону часто раздаются звонки неизвестных людей.

· Когда пребывание в ванной или туалете становится чрезмерно длительным.

· Когда разговоры по телефону становятся насыщенными специфическим жаргоном.

· Когда резко меняются музыкальные предпочтения.

· Когда видим ухудшение памяти, невозможность сосредоточится.

· Когда видим частую и резкую смену настроения и активности.

· Когда повышенная утомляемость сменяется неукротимой энергичностью.

· Когда видим чрезмерную бледность кожи.

· Когда видим расширенные или суженные в точку зрачки.

· Когда видим покрасневшие веки и глаза.

· Когда слышим замедленную или резко ускоренную речь.

· Когда видим резкую потерю веса с колебанием аппетита.

· Когда время от времени наблюдаем быстро проходящие симптомы, похожие на простуду или грипп.

· Когда появился хронический кашель.

· Когда наблюдаем расстроенную координацию движений.

· Когда видим следы от инъекций, порезы, синяки, инфильтраты и нарывы в местах инъекций.

· Когда находим шприцы, непонятные порошки, маленькие коробочки, капсулы, бумажки, свернутые в трубочки, обожженную металлическую посуду и ложки.

· Когда лабораторный анализ свидетельствует о положительном результате.

Чего делать?

Внимательно наблюдать, если не уверены — накапливать факты, обсудить их с ребенком, обратитесь к специалисту самостоятельно или вместе. Найти, что можно изменить в своем поведении, чтобы воздействовать на ситуацию. Постарайтесь быть предельно последовательными. Привлеките к решению проблемы возможных союзников.

Чего не делать!!!

Не впадать в панику, не читать нотаций, не угрожать, не запугивать, не демонстрировать чрезмерного волнения, не терять самообладания. Не требовать обещаний, «что это в последний раз». Не рассчитывать на полную искренность. Не ожидать немедленных изменений в поведении ребенка. Не обвинять себя и окружающих. Не обещать применения нереальных мер.

Педагог- психолог Иванова А.В.

21.04.2015

Как грамотно ответить на оскорбления, чтобы пресечь конфликт на корню?

Содержание статьи

В повседневной жизни мы часто сталкиваемся с негативными высказываниями в наш адрес. Большинство людей ставят в тупик оскорбления, они не знают, как правильно реагировать на неприятные слова и при этом сохранить свое лицо. Давайте рассмотрим эффективные стратегии, которые помогут дать отпор обидчику.

1. Оскорбить в ответ

Первая реакция на неприятные слова — это оскорбить в ответ. Такой вариант возможен, но если ответ будет уместен, то есть будет остроумным и разряжать в целом ситуацию. Если же вы не умеете подбирать сразу нужные слова, и вам в голову приходит оскорбить собеседника в ответ, то это не лучший выход. Так вы только покажете, что слова действительно задели вас, и ссора не прекратится.

2. Пошутите над ситуацией

Остроумный ответ в первом варианте позволит выбить человека из колеи. Шутливый ответ, сарказм поможет разрядить ситуацию, высмеять оппонента и перевести на свою сторону аудиторию. Смешно ответив, вы как будто принимаете позицию слабого. Так вы введете собеседника в заблуждение. Например, если коллега говорит, что вы отвратительно сделали презентацию. То поблагодарите его в ответ и скажите, что обязательно подумаете об этом завтра.

3. Примите критику к сведению

Порой близкие люди или руководитель критикуют за дело и даже не думают оскорблять вас. Такие слова стоит принять и подумать о том, что вы сделали не так. Принятие критики делает нас только лучше и сильнее. Если слова были слишком обидные, задумайтесь, что вызвало такую реакцию у человека. Возможно, вы спровоцировали его своими действиями.

4. Выявите скрытую цель и ответьте на нее

Любой человек, оскорбляя другого, преследует определенное намерение. Раскройте замысел человека в своем ответе. Например, на грубые слова или мат ответьте «Видимо, я чем-то сильно насолил вам, раз вы так обращаетесь со мной». С помощью вежливого ответа вы сможете выяснить реальную причину негативного поведения оппонента.

Пройдите онлайн-курсы бесплатно и откройте для себя новые возможности Начать изучение

5. Сохраните спокойствие

Если незнакомый человек, коллега беспочвенно оскорбляет вас, то, скорее всего, негативной реакцией они пытаются скрыть свою неуверенность, скучную и однообразную жизнь. В такой ситуации не стоит принимать слова на свой счет, а лучше сохранить спокойствие. Продолжайте применять прошлую стратегию, спрашивая у человека настоящую причину такого поведения.

6. Игнорируйте оскорбления

Иногда игнорирование негатива работает лучше, чем крутой и умный ответ. Так вы покажите, что вам не интересен обидчик, и тем более его бессмысленные оскорбления. Если вам написали гадости в соцсетях, то тут еще проще, можно просто не отвечать на сообщения или удалить неприятный комментарий.

Важно помнить, что никто не вправе принижать ваше достоинство и репутацию. Оградите себя от негативных людей, сохраняйте спокойствие. Это была часть эффективных тактик по управлению конфликтными ситуациями. Еще больше полезной информации вы можете найти в онлайн-курсе «Управление конфликтом». Если вы хотите научиться красиво и уместно отвечать на негатив, то этот курс именно для вас.

Родитель — тоже человек: обидные слова ребенка и как на них реагировать

Психолог центра «Архитектура будущего» Александра Чернышева рассказывает родителям, откуда берутся обидные слова ребенка и как на них реагировать. 

— Часто во время ссоры люди произносят неприятные слова, которые впоследствии отрицают. Мы действительно говорим не то, что думаем, или в этом состоянии всплывает именно то, что мы так долго мы держали в себе?

— Встречаются оба варианта. Очень часто в запале ссоры произносятся те слова, которые изначально человек не намеревался произносить. Безусловно, об этих словах человек думает и держит их в голове. Однако это совсем не значит, что вне конфликтной ситуации он бы это высказал. В подростковом возрасте ссоры часто сопровождаются выплеском эмоций. Когда недовольство друг другом накапливается, в порыве ссоры, на эмоциях каждый может высказать то, что беспокоит его и раздражает в грубой форме.

— Что делать, если ребенок произнес обидную болезненную фразу, после которой кажется, что вернуться к прошлым отношениям не удастся?

-Во-первых, вспомните о так называемых «Я-высказываниях». Суть метода заключается в том, что мы говорим  про себя и свои эмоции: не «Ты меня обидел», «Ты меня расстроил», «Ты меня разозлил», а «Я обиделся», «Я расстроился» и «Я разозлился». Тем самым начните с признания существования своих эмоций.

Каждый человек знает болезненные точки родных и близких и может в ссорах неосознанно на них надавить. Ребенок, произнося обидную для вас фразу, делает именно это.

Во-вторых, необходимо помнить о том, что в отношениях между родителем и ребенком главная роль отводится родителю. Если вам кажется, что после произнесенных ребенком обидных слов к прежним отношениям не вернуться, значит, вы относитесь к ребенку как к равному, что неправильно. Главный – родитель, и его задача объяснить ребенку, какие последствия бывают из-за неприятных слов и выражений. В случае, если мы обижаемся и глубоко погружаемся в  обиду, мы оказываемся за рамками детско-родительских отношений, что вредно для обеих сторон.

— Давайте разберем наиболее часто встречающиеся фразы. Что означает, если ребенок говорит: «Ты меня не любишь»?

-Чаще всего – это запрос на внимание. Наиболее правильной реакцией родителя будет не отвечать: «Нет же, я тебя люблю», — а попытаться понять, чего ребенку не хватает. Нужно расспросить ребенка, почему ему кажется, что его не любят; как он вообще понимает, что любим близкими, то есть в каких действиях для него проявляется любовь.

Кстати, это полезно проанализировать и самим родителям: как вы понимаете, что вас любят. Другой вполне распространенный вариант – это попытка манипулирования: «Я хочу ту игрушку, тот гаджет» и т.п. Если вы понимаете, что сейчас именно такой случай, имеет смысл проговорить с ребенком о взаимосвязи любви и финансовых операций. Если родитель до этого легко шел на покупки и траты по первому желанию ребенка, то в понимании последнего на родителя накладываются некие обязательства в аналогичных ситуациях. Это своеобразный маячок о том, что не будет лишним поговорить с ребенком про финансовые отношения в семье.

— Если ребенок говорит «Ты меня не понимаешь»?

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

— Как можно трактовать слова «Лучше бы я умер» или «Вот умру, ты все поймешь»?

— Обычно за такими словами стоит сильная эмоциональная реакция со стороны ребенка. В то же время детям обычно сложно сформулировать сильные эмоции: малыши топают ногами и кричат: «Я тебя не люблю, ты плохой». Дети постарше могут сказать: «Вот я умру, тогда посмотришь».

Важно встать на место ребенка, попытаться понять, что он в этот момент испытывает. Немаловажно задавать ему вопросы: «Тебе сейчас больно, грустно?», «Ты сейчас злишься, правильно?». Помогайте осознать саму эмоцию и подобрать ей правильное название. Если совместно с ребенком все обсудить, скорее всего, выяснится, что умирать он не собирается.

В крайнем случае, если ребенок часто так говорит, то это может уходить в манипулирование, точно так же, как и с любой другой фразой. Здесь важно иметь в виду, что дети часто высказывают то, чего взрослые боятся. Это бывает как со словами, так и с поведением. Когда ребенок лезет на окно в процессе ссоры, он осознает, что родитель боится этого. Если вы реагируете на это со страхом и паникой, то, с одной стороны, закрепляете у ребенка такое поведение, с другой, не переходите на уровень взаимодействия и прояснения его эмоций.

— Если родитель слышит в свой адрес: «Ты плохая мать», «Ты плохой отец»?

— Идея, что мы плохие родители, существует в нашем сознании с момента появления ребенка. Кроме того, родителю об этом активно напоминают близкие, знакомые, врачи, воспитатели и прочие люди, которые его окружают. Это самая простая вещь, которой родителя можно вывести из себя и заставить его чувствовать вину. Далее родитель либо начинает переживать и стараться для своего ребенка лучше, либо начинает сильнее злиться, так что ссора накаляется еще больше.

Эта фраза – попытка вывести на эмоцию и избавиться от своих эмоциональных переживаний. «Мне плохо, мне грустно, ты плохая мать!» — и вот мы скинули эмоциональное напряжение. Ребенок, тонко чувствуя, цепляет наши эмоции. Иногда это просто обида и манипуляции, а иногда это попытка достучаться и показать, что есть что-то конкретное, что ему не нравится. В последнем случае это вычисляется простым вопросом: «Что тебя не устраивает?». После него вы сможете перейти на конструктивный уровень решения проблем. Главное справьтесь с эмоциями и не переходите с ребенком на взаимные обвинения.

— Что кроется за фразой «Я тебя ненавижу»?

— В этой ситуации я бы прислушалась к тому, что чувствует родитель в этот момент. В нашем обществе табуированы проявления сильных негативных эмоций. Если мы вспоминаем о семье как понятии, то в ней традиционно ребенок не должен возмущаться, громко плакать на людях, злиться, а должен соответствовать образу хорошего ребенка. Поэтому он говорит «я тебя ненавижу», когда накопилось очень много эмоций и недовольств, настолько сильных, что случается взрыв.

— Если мы слышим от ребенка «Я ухожу из дома»?

— Опять же, разделяем на 2 пласта. Первый пласт – манипулирование. Если родитель среагировал правильно (продемонстрировал спокойствие и твердость позиции), то подобного в следующий раз не случится. Если мы этого боимся, то ребенок в каждом новом споре будет идти по этому пути. С другой стороны, если в отношениях все действительно хорошо, в семье взаимопонимание, обычно такой проблемы не возникает. Таким образом, это может быть пусть и манипулятивный, но все-таки сигнал о том, что ребенок чем-то обеспокоен.

— Как реагировать на «Ты испортила мою жизнь»?

— Эта фраза работает в обе стороны: ее можно услышать как от подростков в адрес родителей, так и наоборот. Первое, что стоит сделать родителю, — это вспомнить, не говорил ли он сам таких слов ребенку. Если нет, возвращаемся к проговариванию собственных эмоций и обратно к «Я-высказываниям».

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

— Как понимать фразу «Отстань от меня»?

— Ребенок произносит это, если его личные границы нарушаются. Например, родительского внимания слишком много, и его чрезмерно опекают или оно не такое, какое нужно ребенку, и к ребенку относятся по-детски. «Отстань от меня» вполне может быть сигналом о том, что родителя слишком много в жизни ребенка, причем не в формате старшего партнера, а в формате контролирующего полицейского. «Какие оценки, что в школе, почему в комнате не убрался, почему бардак?»  — в рамках таких вопросов контакт с ребенком формальный, нежели дружеский, партнерский.

— Что делать, если ребенок заявляет «Ты ничего не понимаешь»? «Я взрослый, я умный, а ты старый»?

— Стоит подумать о том, почему ребенку кажется, что ваш опыт не может ничего ему дать. Возможно, пора переходить на более партнерские отношения с меньшим количеством нравоучений.

— Что необходимо сделать родителю, чтобы в будущем ребенок не облекал  негативные эмоции в форму обидных слов?

— Важно проговаривать ребенку собственные эмоции, которые возникают у вас в ответ на его слова. Если мы не будем этого делать, то в какой-то момент наши собственные эмоции могут выйти из-под контроля, приводя к эмоциональной буре, сильному и никому не нужному скандалу. Да и самому ребенку полезно понимать, что детско-родительские отношения все-таки иерархичны, так что в пылу самой сильной ссоры имеет смысл «выбирать выражения». А это легче всего достигается через спокойное объяснение родителями своих эмоций.

— Какие общие рекомендации можете дать для родителей, сталкивающихся с подобными высказываниями?

— Данные фразы являются маркером того, что у ребенка много сильных эмоций, которые он длительное время держал в себе, в результате чего их стало сложно объяснить нормальными необидными словами. После разбора конкретных ситуаций поговорите с ребенком о том, что злиться – это нормально, но нужно осознавать свои эмоции и их подоплеку. Такой вариант действий подойдет для детей доподросткового возраста.

Если говорить о подростковом возрасте, масштаб эмоций увеличивается в несколько раз. Ведь эмоциональная буря, сопровождающая процесс полового созревания, усиливает все реакции. Важно не забывать, что ребенок меняется, растет, ему важно получать от родителя не только защиту и контроль, но внимание и, по крайней мере, совещательное право голоса. Если вы хотите сохранить близкие отношения с ребенком, то помните, что даже самый маленький ребенок – это отдельная личность со своими чувствами, желаниями и потребностями. В таком случае коммуникация будет гораздо более успешной.

Биографическая справка:

Александра Чернышева

Александра Чернышева – психолог-консультант, закончила факультет психологии СПбГУ кафедру Кризисных и экстремальных ситуаций.

С 2007 Александра ведет индивидуальные, групповые консультации и тренинги с детьми и подростками, а также координирует работу лагеря «Архитектура будущего». К сфере ее научных и практических интересов относятся следующие темы:

  • «Уверенность в себе»,
  • «Интеллектуальная успешность»,
  • «Эффективность в общении».

Вы можете бесплатно забронировать путевку в лагерь «Архитектура будущего», в котором работает Александра:

Директор по маркетингу и PR incamp.ru

Навигация по записям

как правильно вести себя родителям упрямого малыша — Российская газета

Если малыш начинает отказываться выполнять ваши указания, не спешите браться за ремень.

Все по-своему, все наперекор! «Сереж, пойдем гулять!» — «Нет, не пойду!» «Иди ужинать, я испекла блины!» — «А я их не люблю!» Да как это не люблю, если раньше дрожал от нетерпения, чувствуя запах из кухни; а гулял так, что за уши домой было не затащить! Да вообще, почему вдруг стало так: почти на все, что ни скажешь — «нет», «не хочу», «не дам»…

Непобедимая физиология

Да, это шокирует, особенно молодых родителей — их двухлетка только начал умилять папу с мамой осмысленной речью, стал по-настоящему общаться, и вдруг стал эдаким ежиком, что и на руки лишний раз не пойдет. Такое впечатление, что главное для него сейчас — идти наперекор.

И, знаете, это совершенно нормально, ваш ребенок правильно, закономерно развивается. Именно к двум годам начинает быстро взрослеть мозг малыша — активнее начинает проявлять себя левое полушарие, отвечающее за аналитическое мышление, он начинает осознавать себя, контролировать свою речь, формируется его «я». Малышу кажется, что ему все по плечу.

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

Ребенок увлечен, поглощен своим новым состоянием, а ввиду слабой силы воли он, пока с трудом переключающийся с одной деятельности на другую, может и просто не понимать обращенную к нему речь. У ребенка и в мыслях нет специально тиранить вас, у него просто может не хватить внимания, чтобы вас дослушать или моральных сил, чтобы послушаться. Так что, можно сказать, что малыши в этом возрасте иной раз капризничают не потому, что хотят достичь определенной цели, они просто не могут справиться со своим упрямством.

Но что поделать — физиология!

От упрямства — к заботе

Которая, однако, может перерасти в черту характера. Ведь при всей неизбежности физиологических процессов черты упрямства с особой силой проявляются у самолюбивых и одновременно активных и энергичных от природы детей. Такие дети в «возрасте упрямства» нуждаются в особом понимании и поддержке.Главное для вас — не мелочиться, правильно расставлять приоритеты.

Старайтесь давайте вашим детям в это время по возможности больше свободы. Если он у вас такой «взрослый», пусть, так и быть, оденет разного цвета варежки, коль ему уж так этого хочется — и увидит, как на это реагируют ребята во дворе. Не мешайте ему положить, убирая игрушки, книжку на мячик — она и без ваших указаний упадет на пол. Вмешиваться стоит только тогда, когда речь идет о безопасности ребенка, пытающегося, скажем, по-взрослому бежать вниз по лестнице через две ступени. Скажу больше: моменты упрямства можно попробовать обращать на пользу малыша.

Дочке подруги вдруг надоело мыть руки перед едой, никакие рассказы о микробах не помогали. Она приняла решение и упрямо ходила мимо умывальника сразу к столу. И у знакомой получилось решить эту проблему как раз через стремление ребенка к самостоятельности. Она попросила девочку помыть руки… маме. И Наташка сделала это с удовольствием, мыла лучше, чем себе, и даже помогла вытереть руки. Понятно, что после такого попечения о родителях девочку уже не надо было лишний раз призывать к гигиене. Попутно выяснилось и то, что желание самостоятельности легко превращается в стремление заботиться о других.

А моя однажды заупрямилась и не захотела ни за что уходить с улицы, несмотря на то, что явно устала. И тут мне повезло — мимо, вместе со своей хозяйкой, прошествовала великолепная колли, явно не из нашей округи. «Слушай, — сказала я Насте. — Побежали домой, расскажем папе, кого мы видели!» Дочка со всех ног рванула к дому делиться впечатлениями. Когда она подросла, классический прием, называемый в литературе «Переключение внимания», действовать, увы, перестал…

Детское упрямство поборет себя само — если использовать то самое стремление к самостоятельности, которое лежит в основании этого качества.

Упрямые родители

Противопоставлять детскому упрямству упрямство взрослое — дело не просто бесперспективное, но вредное и, по-моему, нечестное. Ни в коем случае родители не должны втягиваться в борьбу с детьми, потому что в каждой борьбе есть победители и проигравшие. Малыши, понятно, не победят родителей, а для последних… Неужели вам нравится чувствовать себя круче маленького?

И достаточно ли у вас гибкости и воображения, чтобы переключить маленького человека на что-то интересное для него, соответствующее тому волшебному игровому миру, в котором он живет? Умеете ли вы отличать оттенки отношений, опираясь на темперамент ребенка (вы его чувствуете, вообще?), или вам необходимо только его подчинение? Оцените свое поведение по отношению к малышу. Не унижаете ли вы его?

И что самое странное, эти свои порывы вы компенсируете, чувствуя, возможно, вину за излишнюю строгость, чрезмерным балованием, заласкиванием сына или дочки. В эти моменты вы прощаете им все, снимаете все запреты. И после этого вы еще удивляетесь, что он упрямо, не оттаскиваясь от полки, требует с нее какую-то игрушку? Ребенку ваше непостоянство категорически непонятно. Почему вчера мультик до 10 вечера смотреть было можно, а сегодня — нет? Он так будет до бесконечности настаивать на своем…

Имейте в виду, что, перегнув палку с запретами, вы рискуете повредить психику ребенка. И, вполне возможно, скоро начнете жаловаться не на упрямство малыша, а на его робость и трудности во взаимоотношениях со сверстниками. Ваш ребенок потерял уверенность в себе, вместе с упрямством вы «выплеснули» его самостоятельность.

Цифра

2,5 года — на этот возраст приходится пик детского упрямства.

В борьбе с упрямством:

  • не пытайтесь что-либо внушать своему ребенку, ругать его — это еще сильнее его возбудит;
  • будьте с ребенком настойчивы, если сказали «нет», стойте на своем;
  • исключите из арсенала грубый тон, резкость, стремление «сломить силой авторитета»;
  • не прибегайте к помощи посторонних: ребенку только этого и нужно — истеричность и капризность требует зрителей.

Как реагировать, если чужой ребенок плохо себя ведет

Многие взрослые не знают, как быть, если в самолете неугомонный малыш пинает спинку кресла, если в детском саду их дочку щипает другая девочка, а сыну не дает покоя задиристый одноклассник. Кто-то предпочитает не вмешиваться («Пусть сами разбираются»), другой выбирает агрессивную тактику («Мамаша, следите за своим ребенком!»).

AdMe.ru нашел золотую середину: вот правила, которые подскажут, как вести себя, если вы столкнулись с грубым или агрессивным поведением посторонних детей.

Правило № 1: Если можно промолчать, промолчите

Если вы недовольны тем, что дети бегают, кричат и шумят, и при этом находитесь в месте, где это допустимо: на детской площадке или в парке, никаких замечаний ни родителям, ни детям делать вы не вправе. Лучше отойти туда, где потише, или стараться не посещать места, которые вас раздражают.

Также вы не можете потребовать у другого ребенка уступить вам место в транспорте или освободить качели на детской площадке, потому что ваш долго ждет своей очереди. Максимум, что можно сделать, — мягко попросить, а лучше отвлечь своего ребенка каким-то другим занятием. Да, возможно, покачаться на качелях в этот раз не удастся, но учить детей правилам поведения могут только их собственные родители.

Правило № 2: Начните с родителей ребенка

Если ребенок нарушает социальные нормы: бьет других детей, ломает скамейку, пинает спинку вашего кресла в кино, плюется, кидается камнями, сбрасывает с балкона водяные бомбочки и т. д., вы должны обратиться к его родителям.

Используйте «я-сообщения» («я переживаю», «я беспокоюсь»). Разговаривайте спокойно и вежливо, ведь ваша цель — не обвинить кого-то, а добиться сотрудничества и решить проблему вместе. Примеры подходящих фраз: «Не могли бы вы вмешаться?», «Мы без вас не справимся».

Правило № 3: Разговаривайте с чужим ребенком уважительно

В случаях, когда родители отказываются вмешиваться или их нет рядом с ребенком, нужно поговорить с ним самим. Общайтесь с ним так же, как со взрослым: не нужно ругать его или давать оценку его поведению («Только плохие девочки дерутся»). Но вы имеете право сказать, что его поведение доставляет вам или вашему ребенку неудобство или нарушает социальные нормы («Пожалуйста, перестань шуметь, это мешает другим смотреть фильм»).

На агрессию по отношению к вашему ребенку твердо и громко скажите, глядя обидчику в глаза: «Я не разрешаю так себя вести со своей дочкой/сыном!» Если ребенок отбирает у вашего игрушку или отталкивает на горке, в конфликт нужно вмешаться, но не для того, чтобы отругать зачинщика. Лучше покажите своим примером, как можно устанавливать правила и договариваться. Если договориться не удалось, лучше уйти: от агрессивного ребенка можно лишь дистанцироваться. Прикасаться к чужим детям нельзя: это может повлечь за собой юридическую ответственность.

Правило № 4: Если речь идет о регулярной агрессии или травле, действуйте решительно

В случаях, когда обидчик в одной группе или классе с вашим ребенком и избежать конфликта не получается, смело вставайте на защиту вашего ребенка. Если обращение к родителям обидчика не помогает, идите дальше: обращайтесь к воспитателю или классному руководителю, пишите заявление на имя директора. Узнайте, какая работа с трудными учениками ведется в вашем садике/школе. Часто такие вопросы разбирают на педсовете школы, и в результате такого ребенка могут направить к психологу, социальному педагогу или на медико-психологическую комиссию. Главное — знать: вы вправе бороться за безопасность и психологический комфорт ваших собственных детей.

В тяжелых случаях, когда чужой ребенок нанес вашему травму, вы можете зафиксировать ее в травмпункте и обратиться в суд. До 14-летнего возраста ответственность за ребенка несут его родители, а с 14 лет он в ответе за свои действия сам.

В конце хотим привести спорное мнение психолога Ольги Юрковской о детской агрессии. В своем блоге она рассказала историю о том, как ее сына до синяков кусал другой ребенок. «Здесь меня, конечно, кто-то и осудит, но в ситуации, когда те родители и воспитательница не могли на это повлиять, я села на корточки, честно посмотрела этому мелкому в глаза и сказала: „Если ты еще раз дотронешься до моего сына, я возьму вот эти плоскогубцы и все зубы тебе повыдергиваю, чтобы тебе было нечем кусаться“. Других детей он еще кусал после этого, моего — нет. Дошло с первого раза. Я защитила своего сына, выставила четкую и понятную для мелкого границу, что моего ребенка кусать нельзя: я его обижать не позволю. И я не считаю, что это должно было стать психологической травмой, — это нормальное предупреждение о последствиях».

Как вы думаете, допустимо ли такое поведение мамы?

Иллюстратор Alena Tsarkova специально для AdMe.ru

Как реагировать на замечания посторонних людей в адрес ребенка

В нашей культуре довольно популярны непрошеные советы и замечания посторонним людям, особенно детям и их родителям. Не всегда они справедливы и высказаны тактично, что может вызвать бурю негативных эмоций. Как родителям грамотно вести себя в такой ситуации, поможет разобраться психолог семейного центра «Диалог» Татьяна Паламонова.

Берем себя в руки

Чтобы научиться спокойно реагировать на замечания, нужно в первую очередь уметь быстро брать себя в руки. Есть два несложных упражнения, которые легко можно запомнить и применить, они пригодятся в стрессовой ситуации.

Прежде чем что-то сказать или сделать:

  1. Про себя сосчитать от 1 до 10 и обратно, с 10 до 1.
  2. Сделать несколько глубоких вдохов и выдохов. Как на приеме у врача: «Дышите. Не дышите. Дышите».
  3. Выслушать человека и, если замечание справедливое, поблагодарить его. Ребенок наблюдает за вашим поведением, берет пример. Ругать малыша в присутствии посторонних людей не следует.
  4. Позже обязательно побеседовать с ребенком наедине, объяснив, в чем он был неправ и как лучше поступать в таких ситуациях.

«Замечание чаще всего вызывает негативные эмоции — обиду, злость, гнев. Эти реакции заложены в нас самой природой и могут привести к конфликту, скандалу и даже драке», — отмечает специалист.

Если вы считаете, что мнение человека ошибочно, и если чувствуете, что эмоции вас переполняют:

  1. Прекратите разговор.
  2. Отойдите в сторону.
  3. Примените упражнения, упомянутые выше.
  4. Поговорите с ребенком наедине, объясните, что даже в ситуации несправедливости отвечать конфликтом на конфликт не стоит. Объясните ему суть проблемы, выслушайте его мнение.

Когда замечания необходимы

Ситуация: Незнакомец сообщает ребенку, что тот находится в опасности, когда переезжает нерегулируемый пешеходный переход на велосипеде.

Ваши действия:

Поблагодарите: «Спасибо вам за неравнодушное и внимательное отношение, я не успела вовремя его остановить». В спокойной обстановке поговорите с ребенком наедине, объясните суть проблемы, выслушайте его мнение. Проговорите, как не подвергать жизнь опасности.

Ситуация: На перроне, шутя, группа подростков толкает друг друга. Такое поведение небезопасно, родителей рядом нет.

Ваши действия:

Если в эту ситуацию не вмешаются посторонние люди, может произойти трагедия. Замечание и беседа с детьми со стороны взрослых в этом случае необходима. Постарайтесь поговорить с подростками, будьте дружелюбны и позитивны. Если с вами рядом ребенок, объясните и ему, в чем опасность происходящего.

Объясняйте правила поведения

Чтобы не попадать в неприятные ситуации, с раннего возраста ребенку необходимо объяснять правила поведения, это важная часть воспитательного процесса. Дети с пониманием «свой» и «чужой», «можно» и «нельзя» более социализированы и легко договариваются с людьми.

Если вы с ребенком планируете посетить новое, незнакомое для него место, подготовьте его, расскажите ему, что это за место, как оно устроено, как себя нужно вести и так далее. Через правила поведения в социуме малыш понимает законы окружающего его мира.

Искренне интересуйтесь, что происходит в жизни вашего ребенка, как он реагирует на происходящие с ним события, какие чувства и эмоции он испытывает.

Если в вашей семье произошла ситуация, в которой вы не знаете, как поступить, обращайтесь в столичные семейные центры. Опытные специалисты помогут вам найти ответы даже на самые сложные вопросы.

Источник

Условный рендеринг — React

В React вы можете создавать отдельные компоненты, которые инкапсулируют необходимое вам поведение. Затем вы можете визуализировать только некоторые из них, в зависимости от состояния вашего приложения.

Условный рендеринг в React работает так же, как условия в JavaScript. Используйте операторы JavaScript, такие как if или условный оператор, для создания элементов, представляющих текущее состояние, и позвольте React обновлять пользовательский интерфейс в соответствии с ними.

Рассмотрим эти два компонента:

  function UserGreeting (props) {
  return  

С возвращением!

; } function GuestGreeting (props) { return

Пожалуйста, зарегистрируйтесь.

; }

Мы создадим компонент Greeting , который отображает любой из этих компонентов в зависимости от того, вошел ли пользователь в систему:

  функция Приветствие (реквизит) {
  const isLoggedIn = props.isLoggedIn;
  если (isLoggedIn) {return ; } return ;}
ReactDOM.render (
  
  <Приветствие isLoggedIn = {false} />, document.getElementById ('root'));  

Попробовать на CodePen

В этом примере отображается другое приветствие в зависимости от значения isLoggedIn prop.

Переменные элемента

Вы можете использовать переменные для хранения элементов. Это может помочь вам выполнить условную визуализацию части компонента, в то время как остальная часть вывода не изменится.

Рассмотрим эти два новых компонента, представляющих кнопки выхода и входа в систему:

  function LoginButton (props) {
  возвращение (
    
  );
}

function LogoutButton (props) {
  возвращение (
    
  );
}  

В приведенном ниже примере мы создадим компонент с отслеживанием состояния с именем LoginControl .

Он будет отображать либо , либо в зависимости от его текущего состояния. Он также отобразит из предыдущего примера:

  class LoginControl расширяет React.Component {
  конструктор (реквизит) {
    супер (реквизит);
    это.handleLoginClick = this.handleLoginClick.bind (это);
    this.handleLogoutClick = this.handleLogoutClick.bind (это);
    this.state = {isLoggedIn: false};
  }

  handleLoginClick () {
    this.setState ({isLoggedIn: true});
  }

  handleLogoutClick () {
    this.setState ({isLoggedIn: false});
  }

  оказывать() {
    const isLoggedIn = this.state.isLoggedIn;
    кнопка let;
    если (isLoggedIn) {button = ; } else {button = ; }
    возвращение (
      
<Приветствие isLoggedIn = {isLoggedIn} /> {button}
); } } ReactDOM.render ( , document.getElementById ('корень') );

Попробовать на CodePen

При объявлении переменной и использовании оператора if — прекрасный способ условного рендеринга компонента, иногда вы можете захотеть использовать более короткий синтаксис. Ниже описано несколько способов встроить условия в JSX.

Inline If с логическим оператором &&

Вы можете вставлять выражения в JSX, заключая их в фигурные скобки. Сюда входит логический оператор JavaScript && . Может пригодиться для условного включения элемента:

  функция Почтовый ящик (реквизит) {
  const unreadMessages = props.unreadMessages;
  возвращение (
    

Здравствуйте!

{unreadMessages.length> 0 &&

У вас есть {unreadMessages.length} непрочитанных сообщений.

}
); } const messages = ['React', 'Re: React', 'Re: Re: React']; ReactDOM.render ( , document.getElementById ('корень') );

Попробовать на CodePen

Это работает, потому что в JavaScript true && выражение всегда оценивается как выражение , а false && выражение всегда оценивается как false .

Следовательно, если условие истинно , элемент сразу после && появится в выходных данных. Если это false , React проигнорирует и пропустит его.

Обратите внимание, что возврат ложного выражения все равно приведет к пропуску элемента после && , но вернет ложное выражение. В примере ниже

0
будет возвращено методом рендеринга.

  render () {
  const count = 0; возвращение (
    
{count &&

Сообщения: {count}

}
); }

Встроенный оператор If-Else с условным оператором

Другой метод условного рендеринга встроенных элементов — использование условного оператора JavaScript condition? правда: ложь .

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

  render () {
  const isLoggedIn = this.state.isLoggedIn;
  возвращение (
    
Пользователь {isLoggedIn? 'в настоящее время': 'не'} вошел в систему.
); }

Его также можно использовать для более крупных выражений, хотя это менее очевидно, что происходит:

  render () {
  const isLoggedIn = this.state.isLoggedIn;
  возвращение (
    
{isLoggedIn? : }
); }

Так же, как и в JavaScript, вы должны выбрать подходящий стиль на основе того, что вы и ваша команда считаете более читабельным. Также помните, что когда условия становятся слишком сложными, это может быть хорошее время для извлечения компонента.

Предотвращение рендеринга компонента

В редких случаях может потребоваться, чтобы компонент скрывался, даже если он был визуализирован другим компонентом.Для этого верните null вместо вывода рендеринга.

В приведенном ниже примере отображается в зависимости от значения свойства warn . Если значение свойства равно , ложь , то компонент не отображается:

  function WarningBanner (props) {
  если (! props.warn) {вернуть ноль; }
  возвращение (
    
Предупреждение!
); } Класс Page расширяет React.Компонент { конструктор (реквизит) { супер (реквизит); this.state = {showWarning: true}; this.handleToggleClick = this.handleToggleClick.bind (это); } handleToggleClick () { this.setState (state => ({ showWarning:! state.showWarning })); } оказывать() { возвращение (
); } } ReactDOM.оказывать( , document.getElementById ('корень') );

Попробовать на CodePen

Возвращение null из метода компонента render не влияет на запуск методов жизненного цикла компонента. Например, componentDidUpdate по-прежнему будет вызываться.

реагировать-если — npm

Рендеринг компонентов React условно.

Что делает этот компонент

Взгляните на следующий презентационный компонент, который содержит обычно используемый шаблон для условного рендеринга:

 

const Bar = ({name, age, drinkAge}) => (

{age> = drinkAge? (

Выпить пива , {Name}!

): (

Извините, {name}, вы еще недостаточно взрослые.

)}

);

С React-If вы можете переписать это в более читаемый, выразительный формат:

 

const Bar = ({name, age, drinkAge}) => (

= drinkAge}>

Выпей пива, {name}!

Извини, {name}, ты не достаточно старый.

);

Отсрочка оценки состояния детей

Важно отметить, что, поскольку JavaScript — это язык с нетерпением для оценки, дочерние компоненты компонентов и условия Then и Else будут оцениваться независимо от значения условия. Если это является проблемой по соображениям производительности, можно обернуть упомянутые дочерние элементы / условие в стрелочную функцию, чтобы отложить оценку дочерних элементов / условия, как в следующем примере:

 

const renderData = (data) => {

val computed =

return Вот результат: {вычислено} ;

};

const Foo = ({data}) => (

{() =>

renderData (data)

} < / Then>

Здесь ничего нет

Нет медведей

props.bears.length}>

Массив пустых медведей

)

Таким образом, renderData не будет вызываться в 1-м примере.

и props.bears.length не будут вызываться во втором примере.

Установка и использование

NPM:

npm установить реакцию-если Или с пряжей: пряжа добавить React-if

 

import {If, Then, Else, When, Unless, Switch, Case, Default} из 'response-if';

const {If, Then, Else, When, Unless, Switch, Case, Default} = require ('react-if');

Примеры

Swich / Корпус / По умолчанию

 

импортировать React из react;

import {Switch, Case, Default} из 'response-if';

const myNumber = 3;

const Пример = () => (

Это будет отображаться, если условие выполнено

1}> Это будет отображаться, если условие соответствует

Это будет отображаться, если ни один Case не имеет соответствующего условия

< / div>

);

Сокращения: Когда и если не

 

импортировать React из react;

import {When, Unless} из 'response-if';

const someCondition = false;

const Example = () => (

Это будет отображаться, только если условие истинно

);

const AnotherExample = () => (

Это будет отображаться, только если условие имеет значение FALSE

);

API

Примечание: полностью автоматически сгенерированный API см. На веб-сайте страниц github

Свойство Тип
состояние логический

Если условие оценивается как true , будет отображаться блок , в противном случае будет отображаться блок .Любой блок может быть опущен.

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

<Тогда />

Может содержать любое количество элементов внутри, которые отображаются как есть. Он также может содержать функцию. Не следует использовать вне блока .Он будет отображаться, только если родительский Если условие блока истинно.

Может содержать любое количество элементов внутри, которые отображаются как есть. Он также может содержать функцию. Не следует использовать вне блока . Он будет отображаться, только если родительский Если условие блока ложно.

Контейнер для блоков и .Он отобразит первым совпадающим Case или первым обнаруженным Default (, или null).

Свойство Тип
состояние логический

Если Case — первый случай , оценивается как true внутри родительского , он будет единственным визуализированным.

<По умолчанию />

Если нет Случай имеет свое условие оценивается как истинно внутри родительского , первый Default будет единственным визуализированным.

<Когда />

Сокращенное обозначение ... . К дочерним элементам применяются те же правила, что и при использовании блока Then .

<Если />

Сокращение для ... . К дочерним элементам применяются те же правила, что и при использовании блока Else .

Лицензия

React If выпущен под лицензией MIT.

Авторы

Спасибо этим замечательным людям (смайлик):

Этот проект соответствует спецификации всех участников. Любые пожертвования приветствуются!

5 способов реализовать условный рендеринг в React | автор: Chidume Nnamdi

Плюсы и минусы различных реализаций условного рендеринга в React.

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

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

Попробуйте использовать концентраторы компонентов, такие как Bit.dev, для публикации, документирования и организации компонентов.Таким образом, все ваши компоненты будут доступны для повторного использования во всех ваших проектах.

Пример: изучение компонентов React, опубликованных на Bit.dev

Мы можем применить условную логику if-else к JSX в React. Помните, что JSX компилируется в JS перед выполнением, поэтому мы буквально пишем код JS.

Пример

 var globalVar = truefunction App () {
if (globalVar) {
return
If Rendering

} else {
return
Else Rendering

}
}

Производительность

Операторы if-else могут вызвать бесполезную повторную визуализацию в React.Это может не ощущаться в малых и средних приложениях, но снижение производительности будет весьма заметно в больших приложениях с сотнями или тысячами компонентов.

Давайте рассмотрим следующий пример:

 render () {
if (props.showA) {
return (



)
}
return (


)
}

Компоненты A, B, C устанавливаются в зависимости от условия.

Если showA prop истинно — отображаются A, B, C.Если showA prop имеет значение false, то A пропускается, и отображаются только B и C.

Проблема здесь в алгоритме сравнения React. Этот алгоритм использует React, чтобы знать, когда следует избегать ненужных рендеров.

При исходном значении showA компоненты отображаются в соответствии со своей структурой A -> B -> C. Пока showA истинно и их свойства не меняются, React не будет повторно выполнять рендеринг.

Но структура рендеринга изменится, когда showA станет ложным.Структура будет B -> C. Теперь React увидит структуру, отличную от предыдущей, и повторно отрендерит (отключит и снова смонтирует) компоненты B и C, даже если их свойства / состояние остались прежними. и не требовал повторного рендеринга. Это бесполезный повторный рендеринг.

Тернарный оператор — это более короткая форма условия «if-else». В первой части указывается условие, вторая часть — это возвращаемое значение, если истинно, а последняя часть — это возвращаемое значение, если ложь.

 состояние? true_cond: false_cond 

Пример

 let cond = truefunction App () {
return (
{cond?
If Rendering

:
Else Rendering

}
)
}

Переменные элемента содержат элементы JSX, поэтому их можно использовать в любом месте компонента React.Переменные элемента облегчают чтение и понимание вашего кода, поскольку они устраняют необходимость в нескольких операторах возврата в вашем компоненте.

Стандартный способ реализации этого:

 function App (props) {
if (props.loggedIn) {
return
Logged In

} else {
return
Not Logged В

}
}

У нас есть несколько операторов возврата в вышеуказанном компоненте. Мы используем if-else в JSX для условного рендеринга части пользовательского интерфейса.

Мы можем использовать переменную элемента для хранения элемента, который будет возвращен для каждого результата условного оператора.

Пример

 function App (props) {
let element
if (props.loggedIn) {
element =
Logged In

} else {
element =
Not Logged In
}
return element
}

Мы используем переменную element для хранения последнего элемента, который будет отображаться на основе оценки оператора if-else.

Используя переменные элемента, мы делаем наш код намного чище и удобнее для чтения.

Производительность

Проблемы здесь те же, что и упомянутые в пункте if-else выше.

Оператор AND используется для проверки правильности его левого и правого выражений.

left_expr && right_expr

Если выражение принимает значение TRUE, оператор AND возвращает оценку правого выражения.

Пример:

 (true && "nnamdi") 
// "nnamdi" (true && 1234)
// 1234

С другой стороны, если выражение принимает значение FALSE, то оператор AND возвращает FALSE:

 (false && "nnamdi") 
// false (false && 1234)
// false

Если это так, мы можем использовать этот оператор AND для условного рендеринга JSX в React.

Пример

 function App (props) {
return (

{
props.loggedIn &&

Вы вошли в систему как {props.data.username}


}
< / div>
)
}

Мы используем оператор AND в JSX. Фигурные скобки позволяют нам добавлять и оценивать выражения JS в JSX.

Производительность

Хотя по сути он не отличается от двух предыдущих способов условного рендеринга, выражение JSX с оператором AND (&&) считается лучшим вариантом, поскольку оно заставляет вас возвращать ту же структуру при условном возврате и рендеринге. элементы.

Мы можем настроить компонент так, чтобы он возвращал значение null вместо выражения JSX, чтобы оно оценивалось, но ничего не отображало.

Когда компонент возвращает null, это не позволяет React монтировать компонент.

 function App (props) {
if (props.noRender)
return null

return (

App Component

)
}

Этот компонент возвращает null, если задано свойство noRender. Поэтому, если мы не хотим, чтобы компонент приложения отображался, мы установим props noRender .

Обратите внимание, что методы жизненного цикла компонента, возвращающего значение null, запускаются независимо.

Как упоминалось выше, хотя компонент, возвращающий null , ничего не будет отображать, он все равно будет оцениваться. Это означает ненужные вычисления, которые могут привести к чему-то весьма значительному в больших приложениях.

React Conditional Rendering — RWieruch

Условный рендеринг в React несложен. В JSX — расширении синтаксиса, используемом для React, — вы можете использовать простой JavaScript, который включает операторы if else, тернарные операторы, операторы switch case и многое другое.При условном рендеринге компонент React на основе одного или нескольких условий решает, какие элементы DOM он вернет. Например, на основе некоторой логики он может либо вернуть список элементов, либо текст с надписью «Извините, список пуст». Когда компонент имеет условную визуализацию, внешний вид визуализированного компонента зависит от условия. Статья призвана представить исчерпывающий список вариантов условного рендеринга в React и лучших практик для этих шаблонов.

Содержание

Условный рендеринг в React: if

Самая простая логика условного рендеринга в React выполняется с помощью одного оператора if .Представьте, что вы не хотите рендерить что-то в своем компоненте React, потому что у него нет необходимых свойств React. Например, компонент List в React не должен отображать элементы HTML списка в представлении, если в первую очередь нет списка элементов. Вы можете использовать простой оператор JavaScript if для возврата ранее (шаблон защиты):

 
 

const users = [

{id: '1', firstName: 'Robin', lastName: 'Wieruch'},

{id : '2', firstName: 'Dennis', lastName: 'Wieruch'},

];

function App () {

return (

Hello Conditional Rendering

);

}

Список функций ({list}) {

if (! List) {

return null;

}

возврат (

    {list.map (item => (

    ))}

);

}

function Item ({item}) {

return (

  • {item.firstName} {item.lastName}

  • );

    }

    Попробуйте сами, установив для пользователей значение null или undefined. Если информация из реквизита равна нулю или не определена, компонент React возвращает ноль в условном рендеринге.Там компонент React, который возвращает null вместо JSX, ничего не отображает.

    В этом примере мы выполнили условный рендеринг на основе props, но условный рендеринг также может быть основан на состоянии и хуках. Обратите внимание, как мы еще не использовали оператор if внутри JSX, а только снаружи перед оператором return.

    Условный рендеринг в React: if else

    Давайте продолжим предыдущий пример, чтобы узнать о операторах if else в React.Если списка нет, мы ничего не визуализируем и скрываем HTML, как мы видели раньше, с помощью единственного оператора if. Однако вы можете захотеть показать текст в качестве обратной связи для вашего пользователя, когда список пуст, для лучшего взаимодействия с пользователем. Это будет работать с другим единственным оператором if, но вместо этого мы расширим пример оператором if else:

     
     

    function List ({list}) {

    if (! List) {

    return null;

    }

    if (! List.length) {

    return

    К сожалению, список пуст.

    ;

    } else {

    возврат (

    {list.map (item => (

    ))}

    ) ;

    }

    }

    Теперь компонент List не отображает ничего, текст или список элементов на основе некоторой логики JavaScript. Несмотря на то, что предыдущий пример показывает вам, как использовать операторы if else в React, я предлагаю использовать отдельные операторы if каждый раз, когда вы хотите защитить свой основной возврат (здесь: возврат списка) в качестве наилучшей практики:

     
     

    Список функций ({list}) {

    if (! list) {

    return null;

    }

    если (! List.length) {

    return

    Извините, список пуст.

    ;

    }

    возврат (

    {list.map (item => (

    ))}

    );

    }

    Это более читабельно, чем предыдущий условный рендеринг if else. Все охранники аккуратно выровнены как отдельные операторы if перед основным оператором return, который также можно интерпретировать как неявный оператор else.Тем не менее, ни один из операторов if и else еще не использовался внутри оператора return.

    Условный рендеринг в React: тройной

    Это правда, что мы можем использовать JavaScript в JSX, но это становится трудным при использовании таких операторов, как if, else и switch case в JSX . Нет реального способа встроить его. Другой способ выразить оператор if else в JavaScript — это троичный оператор :

     
     

    function getFood (isVegetarian) {

    if (isVegetarian) {

    return 'tofu';

    } else {

    return 'рыба';

    }

    }

    function getFood (isVegetarian) {

    return isVegetarian? 'тофу': 'рыба';

    }

    Например, представьте, что ваш компонент находится в режиме предварительного просмотра или редактирования.Условие — это логическое значение JavaScript, которое входит в React prop. Вы можете использовать логическое значение, чтобы решить, какой элемент вы хотите условно визуализировать:

     
     

    Рецепт функции ({food, isEdit}) {

    return (

    {food.name}

    {isEdit? (

    ): (

    )}

    );

    }

    Скобки () вокруг обоих неявных операторов возврата в тернарном операторе позволяют вам возвращать один или несколько элементов HTML или компонентов React оттуда.Если это всего лишь один элемент, скобки можно опустить.

    Примечание. Иногда вам нужно обернуть несколько строк элементов одним элементом div как один блок. В любом случае, постарайтесь сделать его легким. Если оболочка между () становится слишком большой, рассмотрите возможность извлечения ее как компонента, как показано в примере.

    Тернарная операция делает условный рендеринг в React не только более кратким, но и дает вам простой способ встроить условный рендеринг в ваш возвращаемый .Таким образом, условно отображается только одна часть вашего JSX, в то время как другие части могут оставаться нетронутыми без каких-либо условий.

    Условный рендеринг в React: &&

    Часто бывает, что нужно отрендерить либо элемент, либо ничего . Вы узнали, что простое условие if помогает решить эту проблему. Однако, опять же, вы хотите иметь возможность встроить условие как тернарный оператор. Возьмем следующий компонент индикатора загрузки, который использует условный тернарный оператор для возврата либо элемента, либо ничего:

     
     

    function LoadingIndicator ({isLoading}) {

    return

    {isLoading?

    Загрузка...

    : null}
    ;

    }

    Это работает отлично, и вы закончили встраивание условия в свой JSX. Однако существует альтернативный способ, исключающий необходимость возвращать null.

    Логический оператор && помогает сделать условия, которые возвращали бы null, более краткими. В JavaScript true && «Hello World» всегда оценивается как «Hello World». false && 'Hello World' всегда оценивается как false:

     
     

    const result = true && 'Hello World';

    консоль.журнал (результат);

    const result = false && 'Hello World';

    console.log (результат);

    В React вы можете использовать это поведение. Если условие истинно, выводом будет выражение после логического оператора &&. Если условие ложно, React игнорирует и пропускает выражение:

     
     

    function LoadingIndicator ({isLoading}) {

    return

    {isLoading &&

    Loading ...

    }
    ;

    }

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

    Условная визуализация в React: switch case

    Теперь могут быть случаи, когда у вас есть несколько условных визуализаций. Возьмем, к примеру, компонент уведомления, который отображает ошибку, предупреждение или информационный компонент на основе строки состояния:

     
     

    function Notification ({text, status}) {

    if (status === 'info') {

    возврат ;

    }

    if (status === 'warning') {

    return ;

    }

    if (status === 'error') {

    return ;

    }

    return null;

    }

    Вы можете использовать switch case operator для множественных условных отображений :

     
     

    function Notification ({text, status}) {

    switch (status) {

    case 'info' :

    возврат ;

    case 'предупреждение':

    return ;

    case 'error':

    return <текст ошибки = {текст} />;

    по умолчанию:

    return null;

    }

    }

    Разумно использовать значение по умолчанию для оператора switch case, потому что компонент React всегда должен возвращать элемент или null.Если компонент имеет условную визуализацию на основе строки, имеет смысл описать интерфейс компонента с помощью TypeScript:

     
     

    type Status = 'info' | «предупреждение» | 'ошибка';

    type NotificationProps = {

    текст: строка;

    статус: Статус;

    };

    функция Уведомление ({text, status}: NotificationProps) {

    переключатель (статус) {

    case 'info':

    return ;

    case 'предупреждение':

    return ;

    case 'error':

    return <текст ошибки = {текст} />;

    по умолчанию:

    return null;

    }

    }

    Корпус коммутатора - хорошее начало для множественного условного рендеринга.Но он имеет те же недостатки, что и оператор if else. Корпус переключателя нельзя использовать в JSX; может это? На самом деле это возможно с помощью функции условного рендеринга, которая запускается автоматически:

     
     

    function Notification ({text, status}) {

    return (

    {(function () {

    switch (status) {

    case 'info':

    return ;

    case 'warning':

    return ;

    case 'error':

    return ;

    по умолчанию:

    return null;

    }

    }) ()}

    );

    }

    При желании можно сделать корпус коммутатора более кратким с помощью функции стрелки условного рендеринга:

     
     

    function Notification ({text, status}) {

    return (

    {(() => {

    переключатель (статус) {

    case 'info':

    return ;

    case 'warning':

    return ;

    case 'error':

    return ;

    default:

    return null;

    }

    }) ()}

    );

    }

    В заключение, оператор switch case помогает вам иметь несколько условных визуализаций.Но лучший ли это способ сделать это? Давайте посмотрим, как мы можем вместо этого иметь несколько условных визуализаций с перечислениями.

    Множественные условные отрисовки в React

    Объект JavaScript с парами ключ-значение для сопоставления называется перечислением:

     
     

    const NOTIFICATION_STATES = {

    info: 'Вы знали? ... ',

    предупреждение:' Будьте осторожны здесь ... ',

    error:' Что-то пошло не так ... ',

    };

    Перечисление - отличный способ обрабатывать условный рендеринг с несколькими условиями в React.Это операторы switch case на стероидах, потому что их можно использовать в JSX. Давайте снова рассмотрим компонент уведомления, но на этот раз с перечислением в виде встроенного объекта (внутренние фигурные скобки):

     
     

    function Notification ({text, status}) {

    return (

    {

    {

    информация: ,

    предупреждение: ,

    Ошибка

    : ,

    } [status]

    }

    );

    }

    Ключ свойства статуса помогает нам получить значение из объекта.Это здорово, не правда ли? Он гораздо более читабелен по сравнению с оператором switch case.

    В этом примере нам пришлось использовать встроенный объект, потому что значения объекта зависят от свойства text. В любом случае это был бы мой рекомендуемый способ. Однако, если это не зависит от свойства text, вы можете использовать перечисление в качестве константы для условного рендеринга:

     
     

    const NOTIFICATION_STATES = {

    info: ,

    warning: ,

    ошибка: ,

    };

    функция Уведомление ({status}) {

    return (

    {NOTIFICATION_STATES [status]}

    );

    }

    Это очищает JSX.Если бы мы по-прежнему полагались на свойство text, которое использовалось ранее, мы могли бы использовать условный рендеринг с функцией для получения значения:

     
     

    const getNotification = text => ({

    info: ,

    предупреждение: ,

    error: ,

    });

    функция Уведомление ({статус, текст}) {

    return

    {getNotification (текст) [статус]}
    ;

    }

    В конце концов, условный рендеринг enum в React более элегантен, чем оператор switch case.Объекты как перечисления открывают множество вариантов для множественного условного рендеринга. Возможны также перестановки логических значений:

     
     

    function Message ({isExtrovert, isVegetarian}) {

    const key = `$ {isExtrovert} - $ {isVegetarian}`;

    return (

    {

    {

    'true-true':

    Я экстраверт-вегетарианец.

    ,

    'true-false':

    Я экстравертный мясоед.

    ,

    'false-true':

    Я вегетарианец-интроверт.

    ,

    'false-false':

    Я интроверт-мясоед.

    ,

    } [ключ]

    }

    );

    }

    Последний пример, тем не менее, немного излишне, и я бы не советовал его использовать. Однако перечисления - один из моих любимых паттернов React, когда дело касается условного рендеринга.

    Вложенная условная визуализация в React

    Что насчет вложенных условных визуализаций в React? Да, это возможно. Например, давайте посмотрим на компонент List из предыдущего примера, который показывает либо список, либо пустой текст, либо ничего:

     
     

    function List ({list}) {

    const isNotAvailable =! List;

    const isEmpty =! List.length;

    возврат (

    {isNotAvailable

    ?

    К сожалению, списка нет.

    : (isEmpty

    ?

    К сожалению, список пуст.

    :

    {list.map (item => ) }

    )

    }

    );

    }

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

    Условный рендеринг с HOC

    Компоненты высшего порядка (HOC) идеально подходят для условного рендеринга в React. HOC могут помочь с несколькими вариантами использования, но одним из вариантов использования может быть изменение внешнего вида компонента с помощью условного рендеринга. Давайте посмотрим на HOC, который показывает элемент или компонент:

     
     

    функция withLoadingIndicator (Component) {

    функция возврата EnhancedComponent ({isLoading,...props}) {

    if (! isLoading) {

    return ;

    }

    возврат (

    Загрузка

    );

    };

    }

    const ListWithLoadingIndicator = withLoadingIndicator (Список);

    function App ({list, isLoading}) {

    return (

    Hello Conditional Rendering

    );

    }

    В этом примере компонент List может сосредоточиться на визуализации списка.Не нужно беспокоиться о статусе загрузки. HOC скрывает весь шум от вашего фактического компонента. В конце концов, вы можете добавить несколько компонентов более высокого порядка (композицию), чтобы скрыть более одного случая границы условной визуализации. В качестве альтернативы HOC вы также можете использовать условный рендеринг с опорой рендеринга.

    Компоненты If Else в React

    И последнее, но не менее важное: существуют внешние библиотеки для работы с условным рендерингом на уровне разметки. Они добавляют компоненты управления, чтобы включить условную визуализацию без JS в JSX:

     
     

    Loading...

    {list.map (item => )}

    Некоторые люди используют его, но лично я бы не рекомендовал его. JSX позволяет вам использовать мощный набор функций JavaScript для самостоятельной обработки условного рендеринга. Для его включения не нужно добавлять компоненты шаблонов. Многие люди считают React, включая JSX, своей библиотекой выбора, потому что они могут обрабатывать рендеринг с помощью чистого HTML и JS в JSX.


    Я надеюсь, что это руководство по React помогло вам узнать об условном рендеринге. Если вам понравилось, поделитесь, пожалуйста, с друзьями. В конце концов, я получил для вас все условные отрисовки в шпаргалке:

    Как написать структуру if else в React JSX

    Давайте узнаем, как вы можете выполнять условный рендеринг в React.

    Вы можете контролировать, какой вывод выводится вашим компонентом React, реализуя условный рендеринг в вашем JSX. Например, предположим, что вы хотите переключаться между отображением кнопки входа и выхода из системы в зависимости от доступности состояния пользователь :

      import React from "react"
    
    function App (props) {
      const {user} = реквизит
    
      if (user) {
        return 
      }
      return 
    }
    
    экспортировать приложение по умолчанию
      

    Вам не нужно добавлять , еще в ваш компонент, потому что React остановит дальнейший процесс, как только он достигнет return .В приведенном выше примере React отобразит кнопку выхода, если значение user является правдивым, и кнопку входа в систему, когда user является ложным.

    Частичный рендеринг с обычной переменной

    Может быть случай, когда вы захотите динамически рендерить часть вашего UI в компоненте. Например, вы можете отобразить кнопку под элементом заголовка:

      import React from "react"
    
    function App (props) {
      const {user} = реквизит
    
      let button = 
    
      if (user) {
        button = 
      }
    
      возвращение (
        <>
           

    Здравствуйте!

    {кнопка} ) } экспортировать приложение по умолчанию

    Вместо того, чтобы писать два оператора возврата, вам просто нужно сохранить динамический элемент пользовательского интерфейса внутри переменной (в данном случае, переменная button )

    Это удобно, потому что вам просто нужно написать статический элемент пользовательского интерфейса только один раз .

    Встроенный рендеринг с оператором &&

    Рендеринг компонента возможен только при выполнении определенного условия, в противном случае рендеринг равен нулю. Например, предположим, что вы хотите отображать динамическое сообщение для пользователей, когда у них есть новые электронные письма в их почтовом ящике:

      import React from "react"
    
    function App () {
      const newEmails = 2
    
      возвращение (
        <>
           

    Здравствуйте!

    {newEmails> 0 &&

    В вашем почтовом ящике появилось {newEmails} новых писем.

    } ) } экспортировать приложение по умолчанию

    Встроенный рендеринг с условным (тернарным) оператором

    Также можно использовать тернарный оператор для динамического рендеринга пользовательского интерфейса. Взгляните на следующий пример:

      import React из "react"
    
    function App (props) {
      const {user} = реквизит
    
      возвращение (
        <>
           

    Здравствуйте!

    { Пользователь? : } ) } экспортировать приложение по умолчанию

    Вместо использования переменной для хранения элемента кнопки вы можете просто использовать тернарный оператор для значения user и отобразить кнопку выхода из системы, если она ложная, или кнопку входа в систему, если она правдива.

    Вот как можно выполнять условный рендеринг в React 👍

    Статьи по теме:

    Когда React выполняет повторный рендеринг компонентов?

    React известен тем, что обеспечивает быстрое взаимодействие с пользователем, обновляя только те части пользовательского интерфейса, которые изменились.

    При рассмотрении производительности рендеринга React есть несколько терминов и концепций, которые может быть трудно понять. Мне не было на 100% ясно, что такое VDOM или как React решает повторно рендерить компоненты в течение некоторого времени.

    В первой части этой статьи я объясню наиболее важные концепции рендеринга в React и , как React решает повторно отрендерить данный компонент .

    В последнем разделе этой статьи я покажу вам, что вы можете сделать, чтобы оптимизировать производительность рендеринга вашего приложения React .

    Если после прочтения у вас возникнут открытые вопросы или вы обнаружите ошибку, не стесняйтесь оставлять комментарии или писать мне по электронной почте.

    Оглавление

    Рендеринг в React

    Что такое рендеринг?

    Если мы хотим понять, как работает рендеринг и повторный рендеринг в React, неплохо было бы понять, что происходит за кулисами библиотеки.

    Рендеринг - это термин, который можно понять на разных уровнях абстракции. В зависимости от контекста он имеет немного другое значение. В любом случае, в конечном итоге, описывает процесс создания изображения .

    Для начала нам нужно понять, что такое DOM (объектная модель документа):

    «Объектная модель документа W3C (DOM) - это не зависящий от платформы и языка интерфейс, который позволяет программам и сценариям динамически получать доступ и обновлять содержимое, структуру и стиль документа."

    На простом английском языке это означает, что DOM представляет то, что вы видите на экране , когда вы открываете веб-сайт, выражается через язык разметки HTML.

    Браузеры позволяют языку JavaScript изменять DOM через API: глобально доступный документ представляет это состояние HTML DOM и предоставляет нам функции для его изменения.

    Вы можете изменить DOM с помощью JavaScript через программный интерфейс DOM, который содержит функционирует как документ .напишите , Node.appendChild или Element.setAttribute .

    Что такое VDOM?

    Затем у нас есть Virtual DOM (или VDOM) React, еще один уровень абстракции поверх него. Он состоит из элементов вашего приложения React.

    Изменения состояния в вашем приложении сначала будут применены к VDOM. Если новое состояние VDOM требует При изменении пользовательского интерфейса библиотека ReactDOM будет эффективно делать это, пытаясь обновить только то, что требует обновления .

    Например, если изменяется только атрибут элемента, React обновит атрибут элемента HTML только на вызов document.setAttribute (или что-то подобное).


    Красные точки представляют собой обновления дерева DOM.
    Обновление VDOM не обязательно запускает обновление реального DOM.

    Когда VDOM обновляется, React сравнивает его с предыдущим снимком VDOM а затем только обновляет то, что изменилось в реальной DOM.Если ничего не изменится, настоящий DOM вообще не будет обновляться. Этот процесс сравнения старого VDOM с новым называется diffing .

    Реальные обновления DOM выполняются медленно, потому что они вызывают фактическую перерисовку пользовательского интерфейса. React делает это более эффективным за счет обновление минимально возможного количества в реальном DOM.

    Таким образом, мы должны знать разницу между собственными и виртуальными обновлениями DOM.

    Подробнее о том, как это работает, читайте в документации React о согласовании.

    Что это означает для производительности?

    Когда мы говорим о рендеринге в React, мы действительно говорим о выполнении функции рендеринга , чего не делает . всегда подразумевают обновление UI .

    Давайте посмотрим на это на примере:

      const App = () => {
      const [сообщение, setMessage] = React.useState ('');
      возвращение (
        <>
          
          <Плитка />
        
      );
    };  

    В функциональных компонентах выполнение всей функции эквивалентно функции рендеринга в компонентах класса.

    При изменении состояния родительского компонента (в данном случае App ) два компонента Tile будут повторно визуализированы, даже если второй даже не получает никакого реквизита.

    Это означает, что функция render вызывается три раза, но фактические модификации DOM происходят только один раз в компоненте Tile , который отображает сообщение:

    Красные точки снова представляют рендеры.
    В React это означает вызов функции рендеринга.В реальном DOM это означает перерисовку пользовательского интерфейса.

    Хорошая новость в том, что вам не нужно слишком беспокоиться об узких местах производительности при повторной отрисовке пользовательского интерфейса. Реагировать уже оптимизирует это для вас.

    Плохая новость: Все эти красные точки слева означают, что функция рендеринга этих компонентов был казнен.

    Выполнение этих функций рендеринга имеет два недостатка:

    1. React должен запустить свой алгоритм сравнения для каждого из этих компонентов, чтобы проверить, следует ли обновлять пользовательский интерфейс.
    2. Весь ваш код в этих функциях рендеринга или функциональных компонентах будет выполнен снова.

    Первый пункт, возможно, не так важен, поскольку React умеет достаточно эффективно вычислять разницу. Опасность заключается в том, что код, который вы написали, выполняется повторно при каждом рендеринге React.

    В приведенном выше примере у нас есть небольшое дерево компонентов. Но представьте, что произойдет, если у каждого узла будет больше дочерних элементов, и у них снова могут быть дочерние компоненты.Посмотрим, как это можно оптимизировать.

    Хотите увидеть повторный рендеринг в действии?

    React DevTools позволяет выделять рендеры в разделе Компоненты -> Параметры просмотра -> Выделение обновлений при рендеринге компонентов . Это покажет вам виртуальных рендеров .

    Если вы хотите увидеть нативных повторных рендеров , вы можете сделать это в Chrome DevTools, в трехточечном меню справа -> Дополнительные инструменты -> Рендеринг -> Краска мигает .

    Теперь щелкните свое приложение, выделив сначала повторные рендеры React, а затем нативные рендеры, и вы увидите, насколько React оптимизирует нативный рендеринг .

    Пример работы функции мигания краски в Chrome.

    Когда React выполняет повторный рендеринг?

    Выше мы видели, что вызывает повторную отрисовку нашего пользовательского интерфейса, но с чего для начала вызывается функция рендеринга React?

    React планирует рендеринг при каждом изменении состояния компонента .

    Планирование рендеринга означает, что это происходит не сразу. React постарается найти для этого лучший момент.

    Изменение состояния означает, что React запускает обновление, когда мы вызываем функцию setState (в хуках React вы должны использовать useState ). Это не только означает, что будет вызвана функция рендеринга компонента, но также и то, что все его последующие дочерние компоненты будут повторно отрисованы, независимо от того, изменились ли их свойства или нет .

    Если ваше приложение плохо структурировано, возможно, вы используете намного больше JavaScript, чем вы ожидали, потому что обновление родительский узел подразумевает выполнение функции render для всех дочерних узлов .

    В последней части статьи мы увидим несколько советов, которые помогут вам предотвратить такого рода накладных расходов.

    Почему мой компонент React не обновляется при изменении его свойств?

    Есть две распространенные причины, по которым React может не обновлять компонент, даже если его реквизиты изменились:

    1. Реквизиты не были правильно обновлены через setState
    2. Ссылка на опору осталась прежней

    Как мы Как уже было сказано ранее, React повторно визуализирует компонент, когда вы вызываете функцию setState для изменения состояния (или предоставленную функцию из хука useState в функциональных компонентах).

    В результате дочерние компоненты обновляются только тогда, когда состояние родительского компонента изменяется с помощью одной из этих функций .

    Непосредственное изменение объекта props недопустимо. , поскольку это не вызывает никаких изменений, и React не замечает этих изменений.

      this.props.user.name = 'Феликс';  

    Не делайте этого!

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

      const Родитель = () => {
      const [пользователь, setUser] = Реагировать.useState ({имя: 'Феликс'}); const handleInput = (e) => {
        e.preventDefault ();
        setUser ({... пользователь, имя: e.target.value,}); };
    
      возвращение (
        <>
          
          <Дочерний пользователь = {пользователь} />
        
      );
    };
    
    const Child = ({пользователь}) => (
        

    {user.name}

    );

    Важно изменить состояние с помощью соответствующих функций React. Вы можете найти Codepen здесь.

    Обратите внимание, как я обновляю состояние, используя setUser , функцию, которую я получаю от React.useState . Эквивалент этого в компонентах класса будет this.setState .

    Принудительное повторное рендеринг компонента React

    За те два года, что я профессионально работал с React, я ни разу не подошел к моменту, когда мне нужно было для принудительного повторного рендеринга. Я рекомендую вам прочитать статью с самого начала, если вы здесь для этого потому что обычно есть лучший способ справиться с компонентами React, которые не обновляются.

    Однако, если вам абсолютно необходимо принудительное обновление, вы можете сделать это следующими способами:

    Использование функции React

    forceUpdate

    Это наиболее очевидный.В компонентах класса React вы можете принудительно выполнить повторный рендеринг, вызвав эту функцию:

    Принудительное обновление в хуках React

    В хуках React функция forceUpdate недоступна. Вы можете принудительно обновить без изменения состояние компонентов с помощью React.useState выглядит следующим образом:

      const [state, updateState] = React.useState ();
    const forceUpdate = React.useCallback (() => updateState ({}), []);  

    Я получил это от StackOverflow.Возможно, вам это никогда не понадобится.

    Как оптимизировать повторный рендеринг

    Пример неэффективного повторного рендеринга - это когда родительский компонент контролирует состояние дочернего компонента. Помните: при изменении состояния компонента все дочерние элементы будут повторно отрисованы.

    Я расширил пример, который уже использовал для объяснения React.memo, чтобы иметь больше вложенных дочерних элементов. Давай, попробуй.

    Цифры желтого цвета подсчитывают, сколько раз выполнялась функция render каждого компонента:

    Поиграйте с исходным кодом на codepen.

    Несмотря на то, что мы обновили только состояние синего компонента, гораздо больше рендеров других компонентов был запущен.

    Контроль, когда компонент должен обновляться

    React предоставляет нам несколько функций для предотвращения этих ненужных обновлений.

    Давайте посмотрим на них, после чего я покажу вам другой, более эффективный способ повышения производительности рендеринга.

    React.memo

    Первый, который я уже раздавал ранее, это React.памятка . Я уже писал об этом более подробную статью, но Таким образом, предотвращает рендеринг компонентов React Hook, если свойства не меняются.

    Пример этого в действии выглядит примерно так:

      const TileMemo = React.memo (({children}) => {let updates = React.useRef (0);
      возвращение (
        
    Памятка {дети}
    ); });

    Есть еще несколько вещей, которые вам нужно знать об этом, прежде чем использовать его в производственной среде.Я рекомендую вам проверить из моей статьи на React.memo после прочтения этой.

    Эквивалент для классов React - использование React.PureComponent .

    shouldComponentUpdate

    Эта функция является одной из функций жизненного цикла React и позволяет нам оптимизировать производительность рендеринга, сообщая React когда обновлять компонент класса.

    Его аргументы - это следующие реквизиты и следующее состояние, которое компонент собирается отобразить:

      shouldComponentUpdate (nextProps, nextState) {
      
    }  

    Эта функция довольно проста в использовании: Возвращение true заставляет React вызывать функцию рендеринга, а возврат false предотвращает это.

    Установить ключевой атрибут

    В React очень часто делают следующее. Узнай, что с ним не так:

      
    { events.map (событие => <Событие event = {событие} /> ) }

    Здесь я забыл установить атрибут ключа . Большинство линтеров предупреждают об этом, но Почему это так важно?

    В некоторых случаях React использует ключевой атрибут для определения компонентов и оптимизации производительности .

    В приведенном выше примере, если событие добавляется в начало массива, React будет думать, что , первый и все последующие элементы изменились и вызовет их повторный рендеринг. Мы можем предотвратить это добавлением ключа к элементу:

      
    { events.map (событие => <Событие event = {event} key = {event.id} />) }

    Старайтесь избегать использования индекса массива в качестве ключа и используйте что-то, что идентифицирует содержимое.
    Ключи должны быть уникальными только среди братьев и сестер.

    Структура ваших компонентов

    Еще лучший способ улучшить повторный рендеринг - это немного реструктурировать ваш код.

    Будьте осторожны при размещении логики. Если вы поместите все в корневой компонент вашего приложения, Все функции React.memo в мире не помогут вам решить проблемы с производительностью.

    Если вы поместите его ближе к тому месту, где используются данные, скорее всего, вам даже не понадобится React.памятка .

    Ознакомьтесь с оптимизированной версией примера и введите текст:

    Вы видите, что, хотя состояние обновляется, другие компоненты вообще не обрабатываются повторно.

    Единственное изменение, которое я внес, - это код перемещения , который обрабатывает состояние в отдельный компонент :

      const InputSelfHandling = () => {
      const [текст, setText] = React.useState ('');
      возвращение (
        <ввод
          значение = {текст}
          placeholder = "Напишите что-нибудь"
          onChange = {(e) => setText (e.целевое значение)}
        />
      );
    };  

    Если вам нужно использовать состояние в других частях вашего приложения, вы можете сделать это с помощью React Context или альтернатив, например MobX и Redux.

    Заключение

    Я надеюсь, что смогу дать вам лучшее понимание того, как работают механизмы рендеринга React, и что вы можете сделать, чтобы получить максимальную отдачу из этого. Для этой статьи мне пришлось провести дополнительное исследование по теме, чтобы лучше понять, как Рендеринг в React.

    Я собираюсь написать больше о производительности внешнего интерфейса, поэтому, если вы хотите получать уведомления о последних статьях, подписывайтесь на меня в Twitter и подпишитесь на мою рассылку.

    Если вы зашли так далеко, вам также стоит прочитать мою статью о React.memo, который более подробно объясняет API, некоторые распространенные ошибки, с которыми вы можете столкнуться, и почему вам не следует всегда используйте React.memo. Спасибо за чтение.

    Интерактивность React: редактирование, фильтрация, условный рендеринг - изучение веб-разработки

    По мере того, как мы приближаемся к концу нашего путешествия по React (по крайней мере, на данный момент), мы добавим последние штрихи к основным областям функциональности в нашем приложении списка Todo.Это включает в себя возможность редактировать существующие задачи и фильтрацию списка задач между всеми, завершенными и незавершенными задачами. Попутно мы рассмотрим условный рендеринг пользовательского интерфейса.

    Предварительные требования:

    Знакомство с основными языками HTML, CSS и JavaScript, знание терминала / командной строки.

    Цель: Чтобы узнать об условном рендеринге в React, а также о реализации фильтрации списков и пользовательского интерфейса редактирования в нашем приложении.

    У нас пока нет пользовательского интерфейса для редактирования названия задачи. Мы вернемся к этому через минуту. Для начала мы можем реализовать функцию editTask () в App.js . Он будет похож на deleteTask () , потому что для поиска целевого объекта потребуется id , но также потребуется свойство newName , содержащее имя для обновления задачи. Мы будем использовать Array.prototype.map () вместо Array.prototype.filter () , потому что мы хотим вернуть новый массив с некоторыми изменениями, а не удалять что-то из массива.

    Добавьте функцию editTask () в компонент приложения в том же месте, что и другие функции:

      function editTask (id, newName) {
      const editedTaskList = tasks.map (task => {
      
        if (id === task.id) {
          
          return {... task, name: newName}
        }
        вернуть задачу;
      });
      setTasks (editedTaskList);
    }  

    Передайте editTask в наши компоненты в качестве опоры точно так же, как мы сделали с deleteTask :

      const taskList = tasks.карта (задача => (
      <Тодо
        id = {task.id}
        name = {task.name}
        завершено = {task.completed}
        ключ = {task.id}
        toggleTaskCompleted = {toggleTaskCompleted}
        deleteTask = {deleteTask}
        editTask = {editTask}
      />
    ));  

    Теперь откройте Todo.js . Мы собираемся провести рефакторинг.

    Чтобы пользователи могли редактировать задачу, мы должны предоставить им для этого пользовательский интерфейс. Сначала импортируйте useState в компонент Todo , как мы делали раньше с компонентом App , обновив первый оператор импорта до этого:

      импортировать React, {useState} из «реагировать»;  

    Теперь мы будем использовать это, чтобы установить состояние isEditing , состояние по умолчанию для которого должно быть false .Добавьте следующую строку в самом верху вашего Todo (props) {…} Определение компонента :

      const [isEditing, setEditing] = useState (ложь);  

    Затем мы собираемся переосмыслить компонент - с этого момента мы хотим, чтобы он отображал один из двух возможных «шаблонов», а не единственный шаблон, который он использовал до сих пор:

    • Шаблон «просмотра», когда мы просто просматриваем задачу; это то, что мы использовали до сих пор в оставшейся части руководства.
    • Шаблон "редактирования", когда мы редактируем задачу. Мы собираемся создать это.

    Скопируйте этот блок кода в функцию Todo () под вашим хуком useState () , но над оператором return :

      const EditTemplate = (
      
    ); const viewTemplate = (
    <ввод id = {реквизит.я бы} type = "checkbox" defaultChecked = {props.completed} onChange = {() => props.toggleTaskCompleted (props.id)} />
    кнопка < type = "кнопка" className = "btn btn__danger" onClick = {() => реквизит.deleteTask (props.id)} > Удалить {props.name}
    );

    Теперь у нас есть две разные структуры шаблона - «редактировать» и «просмотр» - определенные внутри двух отдельных констант. Это означает, что оператор return из теперь повторяется - он также содержит определение шаблона «представления». Мы можем очистить это, используя условный рендеринг , чтобы определить, какой шаблон возвращает компонент и, следовательно, визуализируется в пользовательском интерфейсе.

    В JSX мы можем использовать условие для изменения того, что отображается браузером. Чтобы написать условие в JSX, мы можем использовать тернарный оператор.

    В случае нашего компонента наше условие: «Редактируется ли эта задача?» Измените оператор return внутри Todo () , чтобы он выглядел так:

      return 
  • {isEditing? editTemplate: viewTemplate}
  • ;

    Ваш браузер должен отображать все ваши задачи, как раньше.Чтобы увидеть шаблон редактирования, вам нужно будет изменить состояние isEditing по умолчанию с false на true в вашем коде на данный момент; мы рассмотрим, как заставить кнопку редактирования переключать это в следующем разделе!

    Наконец-то мы готовы сделать нашу последнюю основную функцию интерактивной. Для начала мы хотим вызвать setEditing () со значением true , когда пользователь нажимает кнопку «Редактировать» в нашем viewTemplate , чтобы мы могли переключать шаблоны.

    Обновите кнопку "Редактировать" на панели viewTemplate , например:

        

    Теперь мы добавим тот же обработчик onClick к кнопке «Отмена» в шаблоне редактирования , но на этот раз мы установим isEditing на false , чтобы он вернул нас к шаблону представления.

    Обновите кнопку "Отмена" в шаблоне редактирования вот так:

      <кнопка
      type = "кнопка"
      className = "btn todo-cancel"
      onClick = {() => setEditing (false)}
    >
      Отмена
       переименование {props.name} 
      

    Имея этот код, вы сможете нажимать кнопки «Редактировать» и «Отменить» в своих элементах задачи для переключения между шаблонами.

    Следующий шаг - заставить функциональность редактирования работать.

    Многое из того, что мы собираемся сделать, будет отражать работу, которую мы проделали в Form.js : когда пользователь вводит текст в нашем новом поле ввода, нам необходимо отслеживать вводимый ими текст; как только они отправят форму, нам нужно использовать опору обратного вызова, чтобы обновить наше состояние с новым именем задачи.

    Начнем с создания нового хука для хранения и установки нового имени. По-прежнему в Todo.js , поместите следующее под существующий крючок:

      константа [новое имя, установить новое имя] = состояние использования ('');  

    Затем создайте функцию handleChange () , которая установит новое имя; поместите это под крючки, но перед шаблонами:

      function handleChange (e) {
      setNewName (напр.целевое значение);
    }  

    Теперь мы обновим поле нашего EditTemplate , установив атрибут value для newName и привяжем нашу функцию handleChange () к ее событию onChange . Обновите его следующим образом:

      <ввод
      id = {props.id}
      className = "todo-text"
      type = "текст"
      значение = {newName}
      onChange = {handleChange}
    />  

    Наконец, нам нужно создать функцию для обработки события onSubmit формы редактирования; добавьте следующее чуть ниже предыдущей добавленной вами функции:

      function handleSubmit (e) {
      е.preventDefault ();
      props.editTask (props.id, newName);
      setNewName ("");
      setEditing (ложь);
    }  

    Помните, что нашему реквизиту обратного вызова editTask () нужен идентификатор задачи, которую мы редактируем, а также ее новое имя.

    Свяжите эту функцию с событием submit формы, добавив следующий обработчик onSubmit к editTemplate

    :

        

    Теперь вы можете редактировать задачу в своем браузере!

    Теперь, когда наши основные функции завершены, мы можем подумать о наших кнопках фильтров.В настоящее время они повторяют метку «Все», и у них нет функциональности! Мы будем повторно применять некоторые навыки, которые мы использовали в нашем компоненте , для:

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

    Добавление ловушки фильтра

    Добавьте новую ловушку к функции App () , которая считывает и устанавливает фильтр.Мы хотим, чтобы фильтр по умолчанию был Все , потому что все наши задачи должны отображаться изначально:

      const [фильтр, setFilter] = useState ('Все');  

    Определение наших фильтров

    Наша цель прямо сейчас двойная:

    • У каждого фильтра должно быть уникальное имя.
    • Каждый фильтр должен иметь уникальное поведение.

    Объект JavaScript - отличный способ связать имена с поведением: каждый ключ - это имя фильтра; каждое свойство - это поведение, связанное с этим именем.

    Вверху App.js , под нашим импортом, но над нашей функцией App () , давайте добавим объект с именем FILTER_MAP :

      const FILTER_MAP = {
      Все: () => верно,
      Активно: task =>! Task.completed,
      Завершено: task => task.completed
    };  

    Значения FILTER_MAP - это функции, которые мы будем использовать для фильтрации задач массив данных:

    • Фильтр All показывает все задачи, поэтому мы возвращаем true для всех задач.
    • Фильтр Active показывает задачи, у которых выполнено prop равно false .
    • Фильтр Завершено показывает задачи, для которых выполнено prop равно true .

    Под нашим предыдущим добавлением добавьте следующее - здесь мы используем метод Object.keys () для сбора массива из FILTER_NAMES :

      const FILTER_NAMES = Object.keys (FILTER_MAP);  

    Примечание : мы определяем эти константы вне нашей функции App () , потому что, если бы они были определены внутри нее, они бы пересчитывались каждый раз при повторной визуализации компонента , и мы не хотим тот.Эта информация никогда не изменится, что бы ни делало наше приложение.

    Визуализация фильтров

    Теперь, когда у нас есть массив FILTER_NAMES , мы можем использовать его для визуализации всех трех наших фильтров. Внутри функции App () мы можем создать константу с именем filterList , которую мы будем использовать для сопоставления нашего массива имен и возврата компонента . Помните, здесь нам тоже нужны ключи.

    Добавьте следующее под своим объявлением константы taskList :

      const filterList = FILTER_NAMES.карта (имя => (
      
    ));  

    Теперь мы заменим три повторяющихся s в App.js на этот filterList . Замените следующее:

      
    
      

    С этим:

    Это пока не сработает. Нам нужно еще немного поработать.

    Интерактивные фильтры

    Чтобы сделать наши кнопки фильтров интерактивными, мы должны подумать, какие реквизиты они должны использовать.

    • Мы знаем, что должен сообщать, нажата ли она в данный момент, и ее следует нажимать, если ее имя совпадает с текущим значением состояния нашего фильтра.
    • Мы знаем, что требует обратного вызова для установки активного фильтра. Мы можем напрямую использовать наш крючок setFilter .

    Обновите константу filterList следующим образом:

      const filterList = FILTER_NAMES.карта (имя => (
      
    ));  

    Таким же образом, как мы делали ранее с нашим компонентом , теперь нам нужно обновить FilterButton.js , чтобы использовать предоставленные нами свойства. Выполните каждое из следующих действий и не забудьте использовать фигурные скобки для чтения этих переменных!

    • Заменить все на {props.name} .
    • Установите значение aria-press на {props.isPressed} .
    • Добавьте обработчик onClick , который вызывает props.setFilter () с именем фильтра.

    После всего этого ваша функция FilterButton () должна выглядеть так:

      function FilterButton (props) {
      возвращение (
        кнопка <
          type = "кнопка"
          className = "btn toggle-btn"
          aria-press = {props.isPressed}
          onClick = {() => props.setFilter (props.name)}
        >
           Показать 
           {реквизит.name} 
           задачи 
        
      );
    }  

    Зайдите в браузер еще раз. Вы должны увидеть, что различным кнопкам присвоены соответствующие имена. Когда вы нажимаете кнопку фильтра, вы должны увидеть, как его текст приобретает новый контур - это означает, что он был выбран. И если вы посмотрите на инспектор страниц своего DevTool, нажимая кнопки, вы увидите, что значения атрибутов при нажатии aria и изменились соответственно.

    Однако наши кнопки по-прежнему не фильтруют задачи в пользовательском интерфейсе! Давай закончим с этим.

    Фильтрация задач в пользовательском интерфейсе

    Прямо сейчас наша константа taskList в App () отображает состояние задач и возвращает новый компонент для всех из них. Это не то, что мы хотим! Задача должна отображаться только в том случае, если она включена в результаты применения выбранного фильтра. Прежде чем отображать состояние задач, мы должны его отфильтровать (с помощью массива Array.prototype.filter () ), чтобы удалить объекты, которые мы не хотим отображать.

    Обновите свой taskList следующим образом:

      const taskList = задачи
    .filter (FILTER_MAP [фильтр])
    .map (задача => (
      <Тодо
        id = {task.id}
        name = {task.name}
        завершено = {task.completed}
        ключ = {task.id}
        toggleTaskCompleted = {toggleTaskCompleted}
        deleteTask = {deleteTask}
        editTask = {editTask}
      />
    ));  

    Чтобы решить, какую функцию обратного вызова использовать в массиве .prototype.filter () , мы получаем доступ к значению в FILTER_MAP , которое соответствует ключу нашего состояния фильтра. Если filter - All , например, FILTER_MAP [filter] будет оцениваться как () => true .

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

    Итак, наше приложение функционально завершено.Однако теперь, когда мы реализовали все наши функции, мы можем внести несколько улучшений, чтобы более широкий круг пользователей мог использовать наше приложение.

    LEAVE A RESPONSE

    Ваш адрес email не будет опубликован. Обязательные поля помечены *