Size: a a a

2019 November 25

SB

Silvio Berlusconi in React Kyiv
источник

SG

Stas G in React Kyiv
лучше наверх перенеси эти значения и прокидывай в инпут вместе с onChange обработчиком
источник

SB

Silvio Berlusconi in React Kyiv
Stas G
лучше наверх перенеси эти значения и прокидывай в инпут вместе с onChange обработчиком
тогда каунт синхронизируется и везде одинаковое значение
источник

SB

Silvio Berlusconi in React Kyiv
Stas G
лучше наверх перенеси эти значения и прокидывай в инпут вместе с onChange обработчиком
прикрутить как-то item.title и передавать наверх видимо нужно как-то
источник

SG

Stas G in React Kyiv
сделай так, чтобы не синхронизировался)
источник

SB

Silvio Berlusconi in React Kyiv
Stas G
сделай так, чтобы не синхронизировался)
если бы знал точно как, не спрашивал бы)🤗
источник

SG

Stas G in React Kyiv
сделай массив объектов своих айтемов, там в каждом объекте будет свой каунт
источник

SG

Stas G in React Kyiv
увы, нет времени подробно объяснять
источник
2019 November 26

ЮК

Юленька Куликовская in React Kyiv
Всем привет. Нужен хелп. В чем может быть проблема? У меня от запроса приходят данные, в компонент они уже попадают в виде (props), пропсы по идеи не перезаписываются они же только read-only. Затем я делаю копию одной из переменной из пропсов и потом хочу записать в state. И вот когда я чтото делаю даже с копией у меня почему то перезаписываются все переменные которые от нее наследуются. Я грешила на копию прееменной, но уже несколькими вариантами попробовала и не работает. Прошлась по жизненным циклам  - та же фигня...Не понимаю как такое возможно вообще. Подскажите что это и как с этим бороться?
источник

I

Ihor in React Kyiv
а зачем прямое присваивание стейту (146 и 150 строки)? надо через this.setState
источник

ЮК

Юленька Куликовская in React Kyiv
на этапе дебага еще видно, что строка 146 еще не отработала, а после операций copy переменные стали одинаковыми. сразу же. там даже не а 146 и 150 строке дело. С сылками чтото?
источник

K

Kolya Vlasov in React Kyiv
forEach здесь мутирует пропсы
можно ведь просто сделать
this.props.data.map(item => ({…item, selected: false}))
вместо двух слайсов
источник

K

Kolya Vlasov in React Kyiv
ну и сетить стейт через setState 🙂
источник

Y

Yaroslav in React Kyiv
на всякий: slice() делает shallow copy, потому это не работает
з.ы. clonedAttributes - эт не совсем подходящее название в этом случае ;)
источник

ЮК

Юленька Куликовская in React Kyiv
так господа.. там проблемма немного не в этом. Вот код
источник

ЮК

Юленька Куликовская in React Kyiv
export interface PropsFromState {
 loading: boolean
 data: Attributes[]
 errors?: string
 vehicles: any
}

interface PropsFromDispatch {
   fetchRequest: typeof fetchRequest
   fetchVehicles: typeof fetchVehicles
}

interface IState {
   attributes: AttributesResponseInterface[] | any;
   tableAttributes: any;
}

type AllProps = PropsFromState & PropsFromDispatch

class IndexPage extends React.PureComponent<AllProps, IState> {

constructor(props: AllProps) {
   super(props);
//инициализация переменных
}

render() {
return (
   <Page>
       <Container>
   ….

    { this.renderData() }

);}
public renderData();


componentWillReceiveProps(nextProps: any){
 if (nextProps.data !== this.props.data) {

       if(nextProps.data && nextProps.data.length > 0 && this.state.tableAttributes.length <= 0){
     
       const cloneAttributeList  = Object.assign([], nextProps.data);
       const cloneAttributes  = Object.assign([], nextProps.data);

       cloneAttributes.map((item: AttributesResponseInterface) => item.selected = false);
       this.setState({...this.state, attributes: cloneAttributes, tableAttributes: cloneAttributeList});
    }
 }
}

}

// It's usually good practice to only include one context at a time in a connected component.
// Although if necessary, you can always include multiple contexts. Just make sure to
// separate them from each other to prevent prop conflicts.
const mapStateToProps = ({ vehicle }: ApplicationState) => ({
 loading: vehicle.loading,
 errors: vehicle.errors,
 data: vehicle.vehicles_attributes,
 vehicles: vehicle.vehicles
})

// mapDispatchToProps is especially useful for constraining our actions to the connected component.
// You can access these via `this.props`.
const mapDispatchToProps = {
 fetchRequest,
 fetchVehicles
}

// Now let's connect our component!
// With redux v4's improved typings
export default connect(
 mapStateToProps,
 mapDispatchToProps
)(IndexPage)
источник

☕☕

☕️ ☕️ in React Kyiv
Юленька Куликовская
export interface PropsFromState {
 loading: boolean
 data: Attributes[]
 errors?: string
 vehicles: any
}

interface PropsFromDispatch {
   fetchRequest: typeof fetchRequest
   fetchVehicles: typeof fetchVehicles
}

interface IState {
   attributes: AttributesResponseInterface[] | any;
   tableAttributes: any;
}

type AllProps = PropsFromState & PropsFromDispatch

class IndexPage extends React.PureComponent<AllProps, IState> {

constructor(props: AllProps) {
   super(props);
//инициализация переменных
}

render() {
return (
   <Page>
       <Container>
   ….

    { this.renderData() }

);}
public renderData();


componentWillReceiveProps(nextProps: any){
 if (nextProps.data !== this.props.data) {

       if(nextProps.data && nextProps.data.length > 0 && this.state.tableAttributes.length <= 0){
     
       const cloneAttributeList  = Object.assign([], nextProps.data);
       const cloneAttributes  = Object.assign([], nextProps.data);

       cloneAttributes.map((item: AttributesResponseInterface) => item.selected = false);
       this.setState({...this.state, attributes: cloneAttributes, tableAttributes: cloneAttributeList});
    }
 }
}

}

// It's usually good practice to only include one context at a time in a connected component.
// Although if necessary, you can always include multiple contexts. Just make sure to
// separate them from each other to prevent prop conflicts.
const mapStateToProps = ({ vehicle }: ApplicationState) => ({
 loading: vehicle.loading,
 errors: vehicle.errors,
 data: vehicle.vehicles_attributes,
 vehicles: vehicle.vehicles
})

// mapDispatchToProps is especially useful for constraining our actions to the connected component.
// You can access these via `this.props`.
const mapDispatchToProps = {
 fetchRequest,
 fetchVehicles
}

// Now let's connect our component!
// With redux v4's improved typings
export default connect(
 mapStateToProps,
 mapDispatchToProps
)(IndexPage)
А зачем там обжект ассайн с массивом ?
источник

Y

Yaroslav in React Kyiv
А в чем проблем ещё раз, плз?
> Затем я делаю копию одной из переменной из пропсов и потом хочу записать в state. И вот когда я чтото делаю даже с копией у меня почему то перезаписываются все переменные которые от нее наследуются.
Если в этом, то ты делаешь не deep copy, а shallow copy, потому и изменяя в "копии" - меняется и оригинал, и другие "shallow copies"
источник

☕☕

☕️ ☕️ in React Kyiv
И мап там не правильно используется
И в сет стейт не нужно ...this.state
И компонент вилл ресив пропс деприкейтед
источник

Y

Yaroslav in React Kyiv
p.s. Object.assign тоже делает shallow copy
источник