Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Обсуждений тред (https://javascript.ru/forum/offtopic/47364-obsuzhdenijj-tred.html)

Safort 22.02.2015 11:59

В тред призываются реактщики!

Значит, играюсь я Реактом и нужно мне вывести список комментариев(каждый коммент - компонент) с их номерами. Пишу так:

//...
{
            data.map(function(comment, i) {
              return (
                <Comment name={comment.name} mess={comment.mess} app={this} n={i}/>
              );
            }, this)
          }
//...


Мне в консоль вылетает это:
Цитата:

"Each child in an array should have a unique "key" prop. Check the render method of App. See http://fb.me/react-warning-keys for more information."
В предупреждении говорится, что нужно передать уникальный "key". Ок, переименовываю n в key.

<Comment name={comment.name} mess={comment.mess} app={this} key={i}/>


Всё ок, предупреждения больше нет, но внутри компонента Comment я не могу получить this.props.key. Как так? ;(

Пока что приходится делать так:

<Comment name={comment.name} mess={comment.mess} app={this} key={i} n={i}/>


Мб есть правильный способ?

cyber 22.02.2015 17:39

Кто читал http://www.ozon.ru/context/detail/id/20032936/ ? Как книга?

melky 22.02.2015 22:30

Safort, йо нига.

key - в пределах одного компонента.
http://facebook.github.io/react/docs...namic-children

т.е. это не для использования - это для пометки того, что "вот этот вот Компонент никуда не делся - это перед ним и после него пасаны записались"

ну и соотв-о реакт эту инфу (о том, что компонент не делся никуда) использует при синхронизации реального ДОМ с виртуальным

cyber 24.02.2015 13:39

Цитата:

Сообщение от cyber
Кто читал http://www.ozon.ru/context/detail/id/20032936/ ? Как книга?

Ниужели не кому не интересна артхитектура пк?))

Zend 26.02.2015 17:56

Как вы думаете стоит на IO.js переходить? И почему?

Zend 26.02.2015 18:41

Цитата:

Сообщение от Gozar
Продам Величие оптом и на развес! Рассматриваю варианты мена МДП на другие П. расстройства...

Говорят что признание проблемы - половина решения. Давай выздоравливай. Верим в тебя.

cyber 26.02.2015 22:37

Чет я не вкурю есть ли у canvas нормальный метод что бы получить изображение, я знаю про toDataUrl, но мне нужно например 100х100 получить изображение 100х100 из канваса 500х500.
П.с Как сделать хак, я знаю.

Safort 26.02.2015 22:48

Zend,
Цитата:

Как вы думаете стоит на IO.js переходить? И почему?
Если задаёшь такой вопрос, то, наверное, нет)
Какие у цели? В io.js пока нет каких-то кардинальных отличий от Node.js 0.12. Лично для себя можно экспериментировать, но продакшен пока не нужно переводить. Почему? Потому, что io.js молодой проект и нужно подождать и посмотреть как он будет развиваться дальше.

Zend 27.02.2015 00:41

Цитата:

Сообщение от Safort
Node.js 0.12

После этой версии я и задумался. Глючновата она.
write after end..... не замечали ни чего такого?

cyber 27.02.2015 01:22

Сделал так
CropperJS.prototype.getSelectImage = function ( type ) {

        //TODO save image

        var img = new Image(),
            select = this._select,
            tempCanvas = document.createElement( "canvas" ),
            ctx = tempCanvas.getContext( "2d" );

        tempCanvas.width = select.width;
        tempCanvas.height = select.height;
        ctx.drawImage( this._image, select.x, select.y, select.width, select.height, 0, 0, select.width, select.height );

        img.src = tempCanvas.toDataURL( "image/" + type );
        return img;
    };


Но неужели нет встроенного метода, которым это можно сделать?
Не могу найти

cyber 27.02.2015 02:56

Вопрос про утечку памяти.
Если я удаляю ДОМ элементы, а у него есть дети, при удаление родительского элемента, он уалится только если нету ссылок на него или детей. По идее отдельно детей не нужно удалять.
Но допустим на его дочерний элемент есть ссылка в свойстве то элемент не удалится ?

kobezzza 27.02.2015 08:22

Цитата:

Сообщение от cyber (Сообщение 358656)
Вопрос про утечку памяти.
Если я удаляю ДОМ элементы, а у него есть дети, при удаление родительского элемента, он уалится только если нету ссылок на него или детей. По идее отдельно детей не нужно удалять.
Но допустим на его дочерний элемент есть ссылка в свойстве то элемент не удалится ?

Тут сморя как удаляешь: если через innerHTML, то там в каждом браузере по своему, а если через removeChild, то элемент удаляется из DOM, но если на него есть ссылка, то он и все связанные с ним узлы останутся в памяти, что в общем логично.

cyber 27.02.2015 10:44

Цитата:

Сообщение от kobezzza
но если на него есть ссылка

Если его значение присвоенно какому то свойству то это считается ссылка?

Zend 27.02.2015 10:56

Цитата:

Сообщение от cyber
Если его значение присвоенно какому то свойству то это считается ссылка?

Если ты из кода можешь обратиться к этому свойству то считается. При условии что элемент удалён.

cyber 27.02.2015 10:57

Цитата:

Сообщение от Zend
Если ты из кода можешь обратиться к этому свойству то считается.

Спасибо, а то в этом у меня давно путаница.
Т.е в общем достаточно удалить родительский элемент и ссылки на его детей?

kobezzza 27.02.2015 10:59

Цитата:

Сообщение от cyber (Сообщение 358700)
Если его значение присвоенно какому то свойству то это считается ссылка?

Если ты имеешь доступ к ней, то конечно, я так понял ты имеешь ввиду что если ссылка установлена другой ноде, которая не была удалена? То да, логично, что раз ты можешь получить доступ к этой ноде (через обращение DOM или переменную / свойство), то у тебя и есть ссылка на ту, убитую ноду и следовательно она будет жива (а вместе с ней и все е] чилды) до тех пор пока жива ссылка.

cyber 27.02.2015 11:00

Цитата:

Сообщение от kobezzza
Если ты имеешь доступ к ней, то конечно, я так понял ты имеешь ввиду что если ссылка установлена другой ноде, которая не была удалена? То да, логично, что раз ты можешь получить доступ к этой ноде (через обращение DOM или переменную / свойство), то у тебя и есть ссылка на ту, убитую ноду и следовательно она будет жива (а вместе с ней и все е] чилды) до тех пор пока жива ссылка.

Спасибо, значить я все правильно понимал)))

kobezzza 27.02.2015 11:02

Цитата:

Т.е в общем достаточно удалить родительский элемент и ссылки на его детей?
Да, но в таком случае ссылки лучше хранить в WeakMap, и тогда все будет чистится автоматом.

В этом и крутость WeakMap / WeakSet, что ты можешь добавить туда ссылку на элемент, но если элемент будет удален, то он удалится автоматом.

Например, у тебя на сервере есть объект, соединений пользователей и ты добавляешь его в WeakMap,

var map = new WeakMap();

app.listen(function (req, res) {
    map.add(req, {
       sessionID: '',
       someValue: ''
    })
});


А если соединение порвется, то оно автоматом кильнется из WeakMap (если конечно нет других ссылок).

kobezzza 27.02.2015 11:06

Цитата:

Сообщение от cyber (Сообщение 358717)
Спасибо, значить я все правильно понимал)))

Только учти, что при удалении через innerHTML все не так :)

cyber 27.02.2015 11:07

Цитата:

Сообщение от kobezzza
Да, но в таком случае ссылки лучше хранить в WeakMap, и тогда все будет чистится автоматом.

В этом и крутость WeakMap / WeakSet, что ты можешь добавить туда ссылку на элемент, но если элемент будет удален, то он удалится автоматом

Спасибо, понял, учту. В данном случае не выгодно юзать полифил для проекта где полифил весит как сам проект))

cyber 27.02.2015 11:07

Цитата:

Сообщение от kobezzza
Только учти, что при удалении через innerHTML все не так
__________________

Об это я знаю. Там боль... )

cyber 27.02.2015 11:10

kobezzza, а если у меня есть canvas, и останется ссылка на его контекст?

kobezzza 27.02.2015 11:16

Цитата:

Сообщение от cyber (Сообщение 358733)
kobezzza, а если у меня есть canvas, и останется ссылка на его контекст?

Т.е. нода канваса удалена, но есть ссылка на контекст? Логично, что хоть у тебя и нет прямого доступа к ноде, но у тебя есть внутренняя ссылка на контекст и пока она есть GC не грохнет ноду, но тут я бы сделал тест, чтобы проверить правильность суждения :)

cyber 27.02.2015 11:23

Цитата:

Сообщение от kobezzza
но тут я бы сделал тест, чтобы проверить правильность суждения

Как проверить удалил GC элемент или нет?

kobezzza 27.02.2015 11:25

Цитата:

Сообщение от cyber (Сообщение 358749)
Как проверить удалил GC элемент или нет?

Ну, создай в цикле таких канвасов штук 100500 и смотри на потребление памяти браузера (разумеется отключи все плагины и не открывай других вкладок).

Также в некоторых отладчиках есть для этого удобная панелька (по моему в Хроме и ИЕ есть).

***

Также проверь: а сама работа с контекстом работает ли стабильно, т.е. ченить нарисуй, потом сделай toDataURL или toBlob и глянь результат.

cyber 27.02.2015 11:57

kobezzza, кст про toDataUrl еслть ли какой то метод что бы получить только часть изображения, не могу найти?

kobezzza 27.02.2015 12:01

Цитата:

Сообщение от cyber (Сообщение 358765)
kobezzza, кст про toDataUrl еслть ли какой то метод что бы получить только часть изображения, не могу найти?

Ну дык, просто кропишь свое изображение и берешь от него toDataUrl. А есть специальный метод - я хз, но написать его самому оч просто:

делаешь getImageData(), создаешь новую канву, делаешь там putImageData() и режешь как тебе надо. Подозреваю, что все есть в специальных либах для Канвы, например paper.js

cyber 27.02.2015 13:16

kobezzza, я так и сделал, просто интересно было

cyber 02.03.2015 03:40

Вопрос по git, если я правильно понял, то коммиты лучше делать часто?)

cyber 02.03.2015 03:59

Как нормально можно тестировать код в ие на линукс, без vb и wine?

kobezzza 02.03.2015 09:29

Цитата:

Сообщение от cyber (Сообщение 359169)
Вопрос по git, если я правильно понял, то коммиты лучше делать часто?)

Да, на каждое логическое изменение.

cyber 02.03.2015 14:54

Цитата:

Сообщение от kobezzza
Да, на каждое логическое изменение

А если в данный момент репозиторий закрытый и только для меня (пока) версию менять нужно?

kobezzza 02.03.2015 15:10

Цитата:

Сообщение от cyber (Сообщение 359198)
А если в данный момент репозиторий закрытый и только для меня (пока) версию менять нужно?

Версию чего?

cyber 02.03.2015 15:24

Цитата:

Сообщение от kobezzza
Версию чего?

Проекта

kobezzza 02.03.2015 15:53

Цитата:

Сообщение от cyber (Сообщение 359204)
Проекта

Где задавать? Ты про GIT теги что ли? Ну, когда ты фиксируешь функционал, то в этом есть смысл, конечно.

melky 02.03.2015 16:12

Цитата:

Сообщение от cyber (Сообщение 359169)
Вопрос по git, если я правильно понял, то коммиты лучше делать часто?)

так часто, как считаешь нужным :)

читай про git flow

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

Цитата:

Сообщение от cyber (Сообщение 359171)
Как нормально можно тестировать код в ие на линукс, без vb и wine?

remote ie, browserstack

cyber 02.03.2015 18:04

melky,kobezzza, спасибо)

cyber 03.03.2015 05:16

Иногда бывает что код сохраняется когда есть ошибка и из за этого вылетает ошибка и gulp перестает работать, пробывал повесить обработчик error но всеравно тупит, как лучше сделать?
Пробовал так
gulp.task ( "babel", function () {

    return gulp.src("src/*.js")
            .pipe(babel())
            .on( "error", function () {
                gulp.run( "babel" );
            } )
            .pipe(gulp.dest("dist"))
} );

Safort 03.03.2015 12:47

cyber,
тоже интересует этот вопрос.

Erolast 03.03.2015 15:06

https://www.npmjs.com/package/gulp-plumber
Еще, кстати, на заметку - gulp-watch, для более продвинутого наблюдения.


Цитата:

.on( "error", function () {
   gulp.run( "babel" );
})

Эм... а зачем ты при ошибке заново таск запускаешь? Тогда уж
.on("error", function(err) {
  gutil.log(err.message);
});

же


Часовой пояс GMT +3, время: 16:30.