Обновить
13
0.1
Константин Роман@nihil-pro

Пользователь

Отправить сообщение

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

Не согласен на счет «недоклассов».

В js, действительно, нет protected, но все же такое поведение можно получить, например так:

class A {
    #private = 1;
    
    get protected() {
        return this.#private;
    }
}

class B extends A {

}

console.log(new B().protected) // 1;

или еще такой вариант:

class A {
    #private = 1;
    
    static getProtectedValue(instance: A) {
        return instance.#private;
    }
    
    static setProtectedValue(instance: A, newValue: any) {
        instance.#private = newValue;
    }
}

class B extends A { };
const instance = new B();
console.log(A.getProtectedValue(instance)); // 1;

A.setProtectedValue(instance, 2);
console.log(A.getProtectedValue(instance)); // 2;

// Или так
class C extends A {
    doWork() {
        return A.getProtectedValue(this);
    }
}

console.log(new C().doWork()); // 1;

Более того, так как конструкторы также наследуют свойства, то можно и так:

// ... объявление класса А как и выше

class B extends A { };
const instance = new B();

// тут уже обращение через B
console.log(B.getProtectedValue(instance)); // 1;

B.setProtectedValue(instance, 2);
console.log(B.getProtectedValue(instance)); // 2;


class C extends A {
  doWork() {
    // а тут через C
    return C.getProtectedValue(this);
  }
}

console.log(new C().doWork()); // 1;

Ну что вы неудобные вопросы то задаете? Автор пост написал что бы за час получить плюсики от коллег и забыть, а что там с содержанием не так уж и важно))

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

А про классы у меня есть отличная статья, пора их уже наконец выкинуть из JS/TS

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

А вы, стесняюсь спросить, в курсе, что все браузерное API + все встроенное в сам язык API построено на классах?

если буквально любая либа имеет свои примитивы и в любую либу нужно вникать, разбираться?

Спорное утверждение, вот ваш переписанный пример на неизвестной вам «либе»:

const state = makeObservable({
  title: '',
  count: 0,
  data: [],
  pending: false,
  fetchItems() {
    this.pending = true;
    sleep().then(() => {
      this.data = ['hello', 'world'];
      this.pending = false;
    });
  },
  increment() {
    ++this.count;
  },
  decrement() {
    --this.count;
  },
  onChange(event) {
    this.title = event.target.value;
  },
});

export const App = observer(() => (
  <div>
    <h1>Hello World: {state.title}</h1>
    <div>Counter: {state.count}</div>
    <div>
      <input value={state.title} onChange={state.onChange} />
    </div>
    <div>
      <button onClick={state.increment}>incr</button>
      <button onClick={state.decrement}>decr</button>
      <button onClick={state.fetchItems}>fetch items</button>
    </div>
    {!!state.pending && <div>fetching data...</div>}
    <div>items: {state.data.join(',')}</div>
  </div>
));

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

в самом первом элементарном примере код мобх раздувается на десяток строк, необходимость создавать классы

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

class State extends Observable {
  title = '';
  count = 0;
  data = [];
  pending = false;

  async fetchItems() {
    this.pending = true;
    await sleep();
    this.data = ['hello', 'world'];
    this.pending = false;
  }

  increment() {
    ++this.count;
  }

  decrement() {
    --this.count;
  }

  onChange(event) {
    this.title = event.target.value;
  }
}

export const App = observer(({ state }: { state: State }) => (
  // разметка
));

// ...
<App state={new State} />     

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

Только условия валидации это очень незначительно, и меняется редко, а «добавить фильтр» — наоборот.

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

Далеко вам до джаваскрипта))

У нас await работает с любым thenable объектом, а это любой объект, у которого есть метод then.

P.s. заголовок у вас кликбейтный, конечно, вы же не await реализовали, а awaitable result)

Weight(700)

700 от куда-то взялся, а откуда, и в чем он? 700 грамм? 700 тон?

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

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

О боже, мы обречены…

через is

Если бы не интернет эксплорер, ой, извините — сафари))

Ладно, сами напросились…))

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

Компонент кнопки (button) у меня уже есть в html, нет, реально, ни одной причины делать кнопку в виде веб-компонента. Большая часть остальных, типа Chip, Badge и т.д — делается несколькими строчками цсс. Ну и т.д.

Что реально нужно — автокомплит — маст хэв, только ваш готов процентов на 5, не более. Редкие и не везде нужные, но все же такие вещи, которые на цсс не сделать, например dual-range. То есть, не надо паковать то, что уже есть в хтмл в веб компоненты, надо предлагать то, чего нет.

И хотя я оцениваю решение на условные 5 из 10, в целом — плюсанул, потому что сам веб компоненты люблю, и считаю их недооцененными.

Попробуйте сделать какой-то один, но с полной поддержкой всего. Например, автокомплит должен уметь в множественных выбор, в поиск по опциям, в кастомизацию выбранных опций и самих опций + вести себя для браузера так же как инпут, то есть уметь в валидацию, в :valid, :invalid, :required :empty и тд и тп.

Направление вы выбрали правильное, на мой взгляд.

Ну просто авторы реакта не стали его преждевременно оптимизировать, понятно же)

Вообще не понимаю, каким образом у них такой низкосортный контент набирает сразу после публикации по 20 плюсов, и главное, зачем им это?

Даже читать не стал, просто плюсик поставил.

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

1
23 ...

Информация

В рейтинге
3 524-й
Зарегистрирован
Активность