• Алгоритм для поиска узла в неупорядоченном дереве?

    @dmshar
    В НЕупорядоченном дереве такого алгоритма не существует. Это ничем не отличается от поиска в НЕупорядоченном массиве. Обе задачи требуют просмотра всего набора элементов. При упорядочении - можно думать о повышении эффективности алгоритма.
    Ответ написан
    Комментировать
  • Можно ли как-то оптимизировать этот SQL запрос?

    Melkij
    @Melkij
    PostgreSQL DBA
    Попробуйте так:
    SELECT Prop.*, coalesce("counters".countAllUnits, 0) AS "countAllUnits", coalesce("counters".countVacantUnits, 0) AS "countVacantUnits"
                        FROM "Property" AS Prop
                        INNER JOIN LATERAL
                        (
                         SELECT COUNT(*) AS countAllUnits,
    count(*) filter(where "Unit".status = 'Vacant') as countVacantUnits
                         FROM "Unit"
                         WHERE Prop."id" = "Unit"."propertyId"
                        ) AS "counters" ON true
                        WHERE  Prop."userId" IN (
                              SELECT id FROM "User" WHERE  "companyId" = 200001
                        )
                        ORDER BY Prop."userId" ASC LIMIT 10 OFFSET 0

    Ожидание: раннее отсечение limit 10 и nested loop именно от них.
    Ответ написан
    3 комментария
  • Это параллельное выполнение промиссов?

    Lynn
    @Lynn
    nginx, js, css
    В обоих случаях параллельно, т.к. вы создали промизы до await-ов.
    Разница будет в случае если промисы будут реджектится. Например, если первый резолвится через секунду, а второй реджектится мгновенно, то в первом случае вы сначала дождётесь выполнение первого промиза, а во втором случае Promise.all сразу зареджектится.
    Ответ написан
    1 комментарий
  • Как лучше хранить изображения в базе данных MSSQL?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Хранить изображения в облаке (s3 или s3-совместимым), а в базе ссылки
    Ответ написан
    Комментировать
  • Как найти в mongodb по имени ключа объекта?

    @lega
    Плохое решение, так сессию не заиндексировать - а значит монга будет делать full scan коллекции, что приведет к тормозам при росте коллекции.
    Как компромис - можете продублировать сессю в массив и сделать на него индекс.
    Ответ написан
    Комментировать
  • Как разбить массив на неопределенное количество массивов?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    const result = array.reduce((acc, el) => {
      const key = 'Type' + el.type;
      acc[key] = acc[key] ? [...acc[key], el] : [el];
    
      return acc;
    }, {});


    И легально ли этим заниматься в редьюсере ? Может быть middleware лучше подойдет для этого?

    Легально. Главное придерживаться одного стиля в организации кода, чтобы не было так, что в одном месте данные преобразуются в редьюсере, в другом в middleware.
    Помимо этого, под частные потребности компонента данные можно преобразовывать в селекторах, передаваемых в mapStateToProps.
    Ответ написан
    Комментировать
  • Стоит ли переходить на React.PureComponent по-умолчанию?

    PQR
    @PQR
    React.PureComponent реализует метод shouldComponentUpdate таким образом, что он делает поверхностное сравнение props и state (не глубокое). Вот собственно код:
    https://github.com/facebook/react/blob/c8fbdac2271...
    shouldUpdate =
                !shallowEqual(prevProps, nextProps) ||
                !shallowEqual(inst.state, nextState);


    Что такое shallowEqual? Это по сути сравнение оператором === каждого элемента из prevProps с каждым элементом из nextProps. На всякий случай дам ссылку на реализацию для полного понимания: https://github.com/facebook/react/blob/6963ea4bfcd...

    В итоге всё зависит от структуры ваших props. Если в props вы передаёте объекты которые иногда мутируются, т.е. по ссылке они равны ===, но внутри какие-то данные поменялись (что само по себе выглядит странно в экосистеме redux + reselect, но вполне возможно технически), тогда использование PureComponent вам всё поломает, т.к. на экране какие-то компоненты перестанут перересовываться!

    Если же у вас всё по уму, данные которые передаются через props являются скалярными типами (string, int, float, bool) или immutable объектами, тогда смело используйте PureComponent - в некоторых случаях он поможет избавиться от лишних вызовов render.

    Важное замечание: PureComponent нужно использовать только для так называемых presentational components, т.е. для тех компонент, которые НЕ обёрнуты в вызов redux connect().

    Для container components (т.е. тех компонент, которые обёрнуты в redux connect()) нет смысла наследоваться от PureComponent, т.к. метод connect() оборачивает ваш компонент своей реализацией shouldComponentUpdate, которая также использует shallowEqual. Если вы по недосмотру унаследуете container component от PureComponent - ошибок не будет, но это не имеет никакого смыла, т.к. ваш код по сути будет дважды делать shallowEqual, а зачем делать лишнюю работу?

    Подводя итог, рецепт такой:
    - presentational components наследуем от React.PureComponent
    - container components (которые обёрнуты в redux connect()) наследуем от старого доброго React.Component
    Ответ написан
    1 комментарий
  • Почему get запрос в браузере работает в а в node.js нет?

    rockon404
    @rockon404
    Frontend Developer
    А вы текст ошибки попробуйте вдумчиво прочитать:
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    Origin 'http://localhost:3000' is therefore not allowed access.
    The response had HTTP status code 403.

    Research link
    Ответ написан
    3 комментария
  • Почему get запрос в браузере работает в а в node.js нет?

    @Abcdefgk
    Когда делается запрос от браузера - это запрос от страницы (в браузере), которую отдал ему (браузеру) этот же сервер.
    Когда делается запрос "со стороны" - это запрос "неизвестно от кого". Сервер не принимает запросы "неизвестно от кого" - если ему специально не разрешить принимать запросы "неизвестно от кого".
    В целом это называется CSRF (англ. Сross Site Request Forgery — "межсайтовая подделка запроса")
    Ответ написан
    Комментировать
  • Как написать handleSubmit на изменить атрибута svg в React?

    0xD34F
    @0xD34F Куратор тега React
    При нажатии на svg, event.target присваивается конкретным элементам - картинка внутри svg, текст, фигура итд.

    event.target.closest('svg')

    Допустим я нашел нужный эл-т, и вижу в console.log нужный атрибут, но если вызвать его напрямую, возвращается undefined

    card.getAttribute('stroke')

    UPD. Но вообще, вы совсем не в том направлении двигаетесь. Вместо того, чтобы пытаться достучаться до атрибутов, надо работать со стейтом, который определяет их значения. Как-то так:

    onClickFuagra = () => {
      this.setState({
        strokeFuagra: '...',
      });
    }
    
    onClickFish = () => {
      this.setState({
        strokeFish: '...',
      });
    }

    <Samy svgXML={fuagra} onClick={this.onClickFuagra}>
      ...
    </Samy>
    <Samy svgXML={fish} onClick={this.onClickFish}>
      ...
    </Samy>

    Можно конечно и общий обработчик оставить:

    onClick = e => {
      const svg = e.target.closest('svg');
    
      this.setState({
        [имя свойства зависит от svg, как определить по кому был клик - думайте сами]: '...',
      });
    }

    <div className="banners" onClick={this.onClick}>
      ...
    Ответ написан
    2 комментария
  • Как обрубить верхний-левый угол у div имея неоднородный фон?

    @BarryHAllen
    Задача - сделать угол прозрачным?
    Если так, то:
    background: linear-gradient(135deg, transparent 36px, white 20px);
    https://codepen.io/anon/pen/oyPMZK
    upd: с границей по периметру:
    https://codepen.io/anon/pen/mKzOrz
    Ответ написан
    4 комментария
  • Можно вёрстку html css перенести на react?

    @AlexKindGeek
    Начните с изучения React'a.
    Что такое компоненты, jsx и т.д
    Ответ написан
    Комментировать
  • Как передать несколько массивов значений через axios.put в mongoose?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Не надо копить, а затем отправлять все данные сразу. Коллекциями их принято только забирать с сервера.
    1. Каждое добавление карточки это POST запрос на добавление одной карточки.
    2. Каждое добавление записи это POST запрос на добавление записи.
    3. Каждое обновление записи или карточки это PUT/PATCH запрос с обновленными данными одной записи/карточки.
    4. При удалении карточки, если записи лежат отдельно, на стороне сервера надо их так же удалить.
    Ответ написан
    Комментировать
  • Тестирование в React, в чем ошибка?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Как минимум у вас при попытке вызова render выпадает ошибка:
    Cannot convert undefined or null to object
    Так как вы не передаете total в store.
    Зачем вам вообще оборачивать компонент в connect при тестировании?
    Попробуйте изменить файл компонента так:
    import React from 'react';
    import { connect } from 'react-redux';
    
    export class Balance extends React.Component {
      // some code
    }
    
    const mapStateToProps = ({ total }) => ({ total });
    
    export default connect(mapStateToProps)(Balance);

    То, что вы назвали компонент BalanceCont, семантически неверно. Так как контейнер это HOС поверх вашего компонента, вызовом connect вы оборачиваете компонент в контейнер.

    Теперь вы можете импортировать компонент для тестов, как:
    import { Balance } from './Balance';
    А контейнер в приложение как:
    import Balance from './Balance';

    Измененный тест:
    import React from 'react';
    import { shallow, mount } from 'enzyme';
    import { expect } from 'chai';
    import { Balance } from '../app/containers/balance/src/balance';
    
    describe('<Balance />', () => {
      it('Balance test', function () {
        
        const mockTotal = { /* mock code */ };
        
        const wrapper = shallow(<Balance total={mockTotal} />);
        expect(wrapper.contains(<h3>Мои балансы</h3>)).to.equal(true);
      });
    });
    Ответ написан
    2 комментария
  • Как правильно работать с данными полученными асинхронно в React-redux?

    @Niki_tos
    Посчитайте ваши мин/макс значения в функции mapStateToProps

    import React, { Component } from 'react';
    import { connect } from "react-redux";
    
    
    class componentName extends Component {
    
        render() {
            const {minValue, maxValue} = this.props
    
            return (
                <div>
                </div>
            );
        }
    }
    
    const mapStateToProps = (state, ownProps) => {
        // здесь у вас есть доступ к redux store с вашим массивом данных
        console.log('redux store ', state)
        console.log('own component props ', ownProps)
    
        const minVal = ваша функция
        const maxVal = ваша функция
    
        return {
          minValue: minVal,
          minValue: maxVal,
        };
      };
    
    export default connect(mapStateToProps)(componentName);
    Ответ написан
    Комментировать
  • Что значит эта строка кода?

    dimovich85
    @dimovich85 Куратор тега JavaScript
    https://u-academy.net/
    В ES6 появилась новая форма записи строк, с возможностью интерполяции переменных. Если раньше, чтобы в строку передать переменную надо было разрывать строку и плюсовать переменную, то теперь можно писать все вместе.
    Раньше:
    var some = 5;
    var str = 'I have:' + some + 'apples';

    Теперь:
    let some = 5;
    let str = `I have ${some} apples`;


    Для работы в таком формате надо указать не обычные, а обратные кавычки, которые находятся на клавиатуре под клавишей "esc", там где и тильда и "ё". Далее, саму переменную надо обернуть в такую конструкцию: ${}.
    Ответ написан
    2 комментария
  • Есть хороший и простой пример redux + mongodb?

    BugsCreator
    @BugsCreator
    make it work then make it better
    Понадобится react-thunk. В компоненте вызываете action, который отправляет запрос к api сервера и полученный ответ передает в action dispatch-а.
    В компоненте:
    import { submit } from './actions'
    ...
    onSubmit = (credentials) =>
      this.props.submit(credentials)
        .then((res) => console.log(res))
        .catch((err) => console.log(err))
    ...
    export default connect(null, { submit })(ComponentName);

    В экшене:
    import api from './api';
    
    export const handleSuccessResponse = (data) => ({
      type: USER_LOGGED_IN,
      data
    })
    
    export const submit = (credentials) =>
      (dispatch) => api.request(credentials).then(responseData => dispatch(handleSuccessResponse(responseData)));

    В api (на примере axios):
    import axios from 'axios';
    
    export default request: (credentials) => axios.post('/api/request', { credentials }).then(res => res.data)
    Ответ написан
    Комментировать
  • Как создать поле в state c именем action?

    @Interface
    const action = {name: 'Dima', payload: 30};
    const state = {
        ...state,
        [action.name]: action.payload
    };


    P.s. я бы вам посоветовал подучить "ванильный" javascript перед react / redux
    Ответ написан
    1 комментарий