Size: a a a

2020 March 25

SS

Serhey Shmyg in React Kyiv
Nick Golub
addSpecification = ( e ) => {
   
   const target = e.target.getAttribute('data-target')
   
   this.setState(( { specifications } ) => ( {
     specifications: { ...specifications, count: specifications.count + 1 },
   } ))
 }
Как можно вот это отрефакторить, чтобы вместо specifications прилетали любые другие поля, чтобы обработчик события стал универсальным?
addSpecification = (name, value) => ( e ) => {
   
   this.setState({
       [name]: value
   })
 }


<div onClick={addSpecification(‘specifications’, this.state.specifications + 1)}>Text</div>
источник

SG

Stas G in React Kyiv
покажи лучше начальное состояние своего стейта
источник

SB

Serhiy Boreyko in React Kyiv
addSpecification = (e) => {
   const target = e.target.getAttribute('data-target');
   
   this.setState((state) => ({
     [target]: { ...state[target], count: state[target].count + 1 },
   }));
 }
источник

SB

Serhiy Boreyko in React Kyiv
але я ваш тред не читав, тому мб не так зрозумів
источник

NG

Nick Golub in React Kyiv
ух нифига ж себе, счас потестю
источник

NG

Nick Golub in React Kyiv
Stas G
покажи лучше начальное состояние своего стейта
state ={‘specifications: {count: 1}}
источник

SG

Stas G in React Kyiv
там изначально ошибка из-за того, что пытаются спредить несуществующий стейт
источник

SG

Stas G in React Kyiv
не забудь инициализировать возможными полями или обработать случай, если такого поля еще нет
источник

SG

Stas G in React Kyiv
дефолтное значение добавь
источник

SB

Serhiy Boreyko in React Kyiv
Stas G
не забудь инициализировать возможными полями или обработать случай, если такого поля еще нет
+
источник

SS

Serhey Shmyg in React Kyiv
Та взагалі жопно запихати щось в дата атрибути а потім його звідти забирати з реактом маю на увазі.
можна елегантніше розрулити іншими способами
источник

SB

Serhiy Boreyko in React Kyiv
можна
можна просто писати
const addSpecification = (field) => (event) => { … };

а потім просто
onClick={addSpecification(‘specifications’)}
источник

NG

Nick Golub in React Kyiv
Stas G
не забудь инициализировать возможными полями или обработать случай, если такого поля еще нет
в смысле?
источник

SG

Stas G in React Kyiv
this.setState(( { specifications } ) => ( {
     specifications: { ...specifications, count: specifications.count + 1 },
   } ))
источник

SG

Stas G in React Kyiv
если тут specificationsundefined, получишь ошибку, с которой начинал
источник

NG

Nick Golub in React Kyiv
Serhiy Boreyko
можна
можна просто писати
const addSpecification = (field) => (event) => { … };

а потім просто
onClick={addSpecification(‘specifications’)}
и правда, просто иногда jquery во мне не умирает, с учётом того, что ещё веду на нём проект
источник

NG

Nick Golub in React Kyiv
Serhiy Boreyko
addSpecification = (e) => {
   const target = e.target.getAttribute('data-target');
   
   this.setState((state) => ({
     [target]: { ...state[target], count: state[target].count + 1 },
   }));
 }
вот это реально рабочий вариант, большое спасибо
источник

NG

Nick Golub in React Kyiv
Serhiy Boreyko
можна
можна просто писати
const addSpecification = (field) => (event) => { … };

а потім просто
onClick={addSpecification(‘specifications’)}
попробую ещё вот это применить
источник

SB

Serhiy Boreyko in React Kyiv
addSpecification = (field) => () => {
   this.setState((state) => ({
     [field]: { ...state[field], count: state[field].count + 1 },
   }));
 }
источник

NG

Nick Golub in React Kyiv
Serhiy Boreyko
addSpecification = (field) => () => {
   this.setState((state) => ({
     [field]: { ...state[field], count: state[field].count + 1 },
   }));
 }
прям решение всех моих проблем, большое спасибо 🙏
источник