Нашел еще одно решение для себя, из за того что мне никак не давало покоя мысль о том, что данные есть уже на пререндр странице и мне их нужно дублировать в script. И я подумал, почему бы в getInitialState, не парсить их прямо из HTML, и это работает.
Но я думаю это решения подойдет не для всего, подводные камни которые я вижу такие:
1. Во первых необходимо реализовывать логику самого парсинга, которая не всегда может быть тривиальной
2. Если объем данных большой, парсинг может занимать ощутимое время и в это время компонент не будет отвечать
3. Нужно хранить все нужные невидимые данные для пользователя в атрибутах тэгов постоянно, а не только при серверном пререндеринге, чтобы чек-сумма markup-ов совпадала.
В итоге у меня получилось нечто такое (может кому пригодится):
getInitialState: function () {
if (!isNode) {
var data = [];
$('#dataId').map(function(key, element) {
var id = element.getAttribute('data-reactid');
id = id.substring(id.indexOf('$')+1);
var title = element.innerHTML;
data.push({id: id, title: title})
});
return {data: data}
}
return {};
},
Пожалуйста напишите в комментариях если я что-то упустил важное в минусах данного подхода или наоборот надумал лишнее.