Denis
други, подскажите почему филд финал форм не рендерится <Field name="serviceType" component={InputSelect} options={this.props.arbitraryServicesOptions} onChange={this.onServiceTypeChange} />
Margarita
У меня children - это массив с одним элементом
Артур
JSON.stringify что выдаёт?
Артур
надо чтобы был один эл. без массива
Denis
в консоли чисто как в больнице и на страице его просто нет, как будто не вставлял его
Anonymous
У меня children - это массив с одним элементом
явно во фрагмент обернула, не?
Артур
@che_Porto покажи весь код
Denis
import React, {PureComponent} from 'react' import {change, WrappedFieldProps} from 'redux-form' import {InjectedIntlProps} from 'react-intl' import Select from 'react-select' import {OptionsType} from 'react-select/lib/types' import {Text} from 'appComponents' import {showWarning} from 'utilities' export type SelectOption<E = {id: number}> = E & {label: string, value: string | number} export type SelectOptions<O = {}> = OptionsType<SelectOption<O>> type Props = WrappedFieldProps & InjectedIntlProps & { defaultValue: SelectOption, className: string, required: boolean, isDisabled: boolean, htmlFor: string, label: string, autoFocus: boolean, options: SelectOptions, placeholder?: string, localize?: boolean, isSearchable?: boolean, onChange: (value: SelectOption) => void } export class InputSelect extends PureComponent<Props, {}> { componentWillUnmount() { if (this.props.meta && this.props.meta.dispatch) { this.props.meta.dispatch(change(this.props.meta.form, this.props.input.name,null)) } } componentWillReceiveProps(nextProps: Props) { if (!this.props.defaultValue && nextProps.defaultValue && nextProps.defaultValue.value) { this.onChange(nextProps.defaultValue) } } componentDidMount() { if (this.props.defaultValue) { this.onChange(this.props.defaultValue) } } onChange = (value: SelectOption) => { const {input, onChange} = this.props if (input) { input.onChange(value) input.onBlur(value) } if (onChange) { onChange(value) } } checkValue = () => { const {localize, input} = this.props if (localize && (input && input.value)) { return { ...input.value, label: <Text text={input.value.label} type="bare"/>, value: input.value.value } } else if (input && input.value) { return input.value } else { return } } select = (classNames: string) => { const {placeholder = 'select', autoFocus, options, localize} = this.props return ( <Select {...this.props} menuRenderer={() => showWarning('No menuRenderer handler in InputSelect')} placeholder={placeholder && ((<Text text={placeholder} type="bare" /> as unknown) as string)} classNamePrefix={classNames} autoFocus={autoFocus} options={options.map(option => ({ ...option, label: localize ? <Text text={option.label} type="bare"/> : option.label, value: option.value }))} value={this.checkValue()} // @ts-ignore onChange={this.onChange} noOptionsMessage={() => (<Text text="noData" type="bare"/> as unknown) as string} /> ) } input = () => { const {className, meta, required, input, isDisabled} = this.props let classNames = className ? ${className} react-select : 'react-select' // подсказка ошибок if (meta && meta.error && meta.touched) { classNames += ' validation__select-error' } return input ? ( <div className={form__validation${isDisabled ? ' disabled' : ''}}> {this.select(classNames)} {required && !meta.touched ? <div className="validation__input-required"/> : null} </div> ) : this.select(classNames) } render() { const {htmlFor, input, label} = this.props return label ? ( <div className="form__label"> <label htmlFor={htmlFor || input.name}> {<Text text={label} type="label"/>} </label> {this.input()} </div> ) : ( this.input() ) } }
Denis
Andrey
import React, {PureComponent} from 'react' import {change, WrappedFieldProps} from 'redux-form' import {InjectedIntlProps} from 'react-intl' import Select from 'react-select' import {OptionsType} from 'react-select/lib/types' import {Text} from 'appComponents' import {showWarning} from 'utilities' export type SelectOption<E = {id: number}> = E & {label: string, value: string | number} export type SelectOptions<O = {}> = OptionsType<SelectOption<O>> type Props = WrappedFieldProps & InjectedIntlProps & { defaultValue: SelectOption, className: string, required: boolean, isDisabled: boolean, htmlFor: string, label: string, autoFocus: boolean, options: SelectOptions, placeholder?: string, localize?: boolean, isSearchable?: boolean, onChange: (value: SelectOption) => void } export class InputSelect extends PureComponent<Props, {}> { componentWillUnmount() { if (this.props.meta && this.props.meta.dispatch) { this.props.meta.dispatch(change(this.props.meta.form, this.props.input.name,null)) } } componentWillReceiveProps(nextProps: Props) { if (!this.props.defaultValue && nextProps.defaultValue && nextProps.defaultValue.value) { this.onChange(nextProps.defaultValue) } } componentDidMount() { if (this.props.defaultValue) { this.onChange(this.props.defaultValue) } } onChange = (value: SelectOption) => { const {input, onChange} = this.props if (input) { input.onChange(value) input.onBlur(value) } if (onChange) { onChange(value) } } checkValue = () => { const {localize, input} = this.props if (localize && (input && input.value)) { return { ...input.value, label: <Text text={input.value.label} type="bare"/>, value: input.value.value } } else if (input && input.value) { return input.value } else { return } } select = (classNames: string) => { const {placeholder = 'select', autoFocus, options, localize} = this.props return ( <Select {...this.props} menuRenderer={() => showWarning('No menuRenderer handler in InputSelect')} placeholder={placeholder && ((<Text text={placeholder} type="bare" /> as unknown) as string)} classNamePrefix={classNames} autoFocus={autoFocus} options={options.map(option => ({ ...option, label: localize ? <Text text={option.label} type="bare"/> : option.label, value: option.value }))} value={this.checkValue()} // @ts-ignore onChange={this.onChange} noOptionsMessage={() => (<Text text="noData" type="bare"/> as unknown) as string} /> ) } input = () => { const {className, meta, required, input, isDisabled} = this.props let classNames = className ? ${className} react-select : 'react-select' // подсказка ошибок if (meta && meta.error && meta.touched) { classNames += ' validation__select-error' } return input ? ( <div className={form__validation${isDisabled ? ' disabled' : ''}}> {this.select(classNames)} {required && !meta.touched ? <div className="validation__input-required"/> : null} </div> ) : this.select(classNames) } render() { const {htmlFor, input, label} = this.props return label ? ( <div className="form__label"> <label htmlFor={htmlFor || input.name}> {<Text text={label} type="label"/>} </label> {this.input()} </div> ) : ( this.input() ) } }
а длиннее портянку можно было?
Anonymous
import React, {PureComponent} from 'react' import {change, WrappedFieldProps} from 'redux-form' import {InjectedIntlProps} from 'react-intl' import Select from 'react-select' import {OptionsType} from 'react-select/lib/types' import {Text} from 'appComponents' import {showWarning} from 'utilities' export type SelectOption<E = {id: number}> = E & {label: string, value: string | number} export type SelectOptions<O = {}> = OptionsType<SelectOption<O>> type Props = WrappedFieldProps & InjectedIntlProps & { defaultValue: SelectOption, className: string, required: boolean, isDisabled: boolean, htmlFor: string, label: string, autoFocus: boolean, options: SelectOptions, placeholder?: string, localize?: boolean, isSearchable?: boolean, onChange: (value: SelectOption) => void } export class InputSelect extends PureComponent<Props, {}> { componentWillUnmount() { if (this.props.meta && this.props.meta.dispatch) { this.props.meta.dispatch(change(this.props.meta.form, this.props.input.name,null)) } } componentWillReceiveProps(nextProps: Props) { if (!this.props.defaultValue && nextProps.defaultValue && nextProps.defaultValue.value) { this.onChange(nextProps.defaultValue) } } componentDidMount() { if (this.props.defaultValue) { this.onChange(this.props.defaultValue) } } onChange = (value: SelectOption) => { const {input, onChange} = this.props if (input) { input.onChange(value) input.onBlur(value) } if (onChange) { onChange(value) } } checkValue = () => { const {localize, input} = this.props if (localize && (input && input.value)) { return { ...input.value, label: <Text text={input.value.label} type="bare"/>, value: input.value.value } } else if (input && input.value) { return input.value } else { return } } select = (classNames: string) => { const {placeholder = 'select', autoFocus, options, localize} = this.props return ( <Select {...this.props} menuRenderer={() => showWarning('No menuRenderer handler in InputSelect')} placeholder={placeholder && ((<Text text={placeholder} type="bare" /> as unknown) as string)} classNamePrefix={classNames} autoFocus={autoFocus} options={options.map(option => ({ ...option, label: localize ? <Text text={option.label} type="bare"/> : option.label, value: option.value }))} value={this.checkValue()} // @ts-ignore onChange={this.onChange} noOptionsMessage={() => (<Text text="noData" type="bare"/> as unknown) as string} /> ) } input = () => { const {className, meta, required, input, isDisabled} = this.props let classNames = className ? ${className} react-select : 'react-select' // подсказка ошибок if (meta && meta.error && meta.touched) { classNames += ' validation__select-error' } return input ? ( <div className={form__validation${isDisabled ? ' disabled' : ''}}> {this.select(classNames)} {required && !meta.touched ? <div className="validation__input-required"/> : null} </div> ) : this.select(classNames) } render() { const {htmlFor, input, label} = this.props return label ? ( <div className="form__label"> <label htmlFor={htmlFor || input.name}> {<Text text={label} type="label"/>} </label> {this.input()} </div> ) : ( this.input() ) } }
пздц ты укурился?)
Anonymous
закинул бы в песочницу с хайлайтом синтаксиса что ли))
Denis
а длиннее портянку можно было?
соряныч, попросили весь компонент
Denis
хахаха
Anonymous
Одного потомка я передаю
так что, обернут он во фрагмент или нет?
Margarita
код: https://pastebin.com/288HQSRG
Vova
Vova
Виктор
второй опрос прям норм
Anonymous
нет
https://codesandbox.io/s/hungry-rosalind-3sgt0
Улан
Ребят кто скажет, влияет ли на производительность если state обновляется каждую секунду и это не заканчивается, пока пользователь не нажал на кнопку?
Yura
Да
Улан
А что делать в таком случае?
Ragim
Как вы экспортируете законекченные компоненты? const App = () => {} export default connect(App)
Улан
Я слышал reselect решает вопрос, это так?
Vova
А зачем тебе обновлять стейт каждую секунду?
Andrey
Ребят кто скажет, влияет ли на производительность если state обновляется каждую секунду и это не заканчивается, пока пользователь не нажал на кнопку?
если у тебя от этого стейта малая часть приложения ререндерится - то нет(считай, что нет), если большая - то да
Vadim
А что делать в таком случае?
Не делать так чтобы стейт обновлялся каждую секунду пока пользователь не нажмёт на кнопку
Vadim
Меняется один компонент
Че там именно в стейте меняется каждую секунду то?
Andrey
Меняется один компонент
ну тут важно понимать, на каком он уровне а то можно ведь и App менять раз в секунду если меняется именно 1 компонент, который тупо кусочек верстки рендерит, то вполне ок
Vova
Меняется один компонент
Так ты потестируй Если все лагает то ищи другой путь Если все норм то жди когда начнет лагать
eden
да как обычно
у меня было такое, кажется решилось обновлением пакетов
Улан
Че там именно в стейте меняется каждую секунду то?
Меняется счетчик каждую секунду --
Bogdan
у меня было такое, кажется решилось обновлением пакетов
я вот сделал и теперь не могу одуплить как работает useTranslation и LanguageDetector
Vadim
Меняется счетчик каждую секунду --
То есть тебе что надо посчитать сколько времени пройдёт с момента маунта компонента и до того как пользователь нажмёт кнопку?
Vova
Тогда норм
Улан
Клик на старт и counter--
Bogdan
подскажет кто, сделал вот, не могу понять как же работает все это https://codesandbox.io/s/reacttrelloexample-j1guq
modest
Ребят, не подскажете, почему когда меняю название в, например: — Button —Button.js на index.js в import добавляется './node_modules/react';
modest
Может в настройках изменить что-то можно? В VS Code
Artem
посмотри плагины установленные, мб в них дело.
Mikhail
А что вы про стенсил думаете?
Mikhail
На вид круто
Anonymous
ещё бы денег не просил :)
Dmitriy
А что вы про стенсил думаете?
ssr есть? Декларативность есть?
Mikhail
ещё бы денег не просил :)
Блин не увидел, но так то пох
Mikhail
Или эт оч хуево?
Anonymous
если самому с собой играться то пох, а если на работе предлагать думаю могут завернуть :)
Dmitriy
Ну ты посмотрел?)
Ну да . Это что меня смутило, про бабки вообще молчу)
🦜
или как его там
Mikhail
Да, так
Виталий
Господа, подскажите в каком случае надо использовать setState в виде функции?
Mikhail
Вообще он пиздатым был пока не разросся вроде
Mikhail
Сейчас это махина пиздец
Mikhail
В стенсиле есть сср, вообще описание норм
Виталий
в плане?
что «в плане?»? что за вопрос?
🦜
что «в плане?»? что за вопрос?
в плане в виде функции. setState и так функция
wystan_hugh
Всем привет! а какой самый удобный способ в apollo client с типами сгенеренными через codegen, обновлять cache при mutation. Вариант с fragments кажется сложным, и внутри MutationComponent вроде бы сам cache недоступен.
Виталий
в аргумент можно функцию передавать
Eugene
prevState
🦜
+
Всегда стоит так писать если у тебя реакт 16 версии
🦜
Fiber лучше синхронизирует ui и обновления