вот такой вот у меня вопрос. хотя думаю, фиг кто что напишет...
итак имеем
1 компонент react назовем ее "форма"
2 внтури один из компонентов назовем ее таблица
возможны несолько реализаций, но как то все не складывается.
Первая
сам компонент "таблица" сделан исходя из абстрактных данных. Этот компонент обеспечивает, добавление строк и их удаление, поиск, всякие пользовательские кнопки, управление курсором таблицы. Вывод данных осуществляется "окном", т.е. не все что в таблице б.д. а кусочек.
В определенных случаях компонент таблица обращается к основной форме за "подчиткой" данных
Компонент "форма" уже конкретно знает что это за таблица (например справочник адресов). Он (компонент "форма") считывает данные,и обеспечивает дочитку данных по запросу.
Встал вопрос где хранить номер активной видимой строки таблицы. В какой компоненте.
1 вариант - в компоненте "таблица". там же обеспечивается перемещение курсора. Но в этом варианте, когда осуществляется дочитка данных в основной форме для корректной визуализации необходим доступ к этой переменной из основного компонента. И тут начинаются сопли.... плохо.
2 вариант - храним номер активной строки в компоненте формы. там это дело хранится в структуре типа:
this.state.component['address'] =
{ feature: (props)=> { return (<__table {...props} />)},
props :{
frameDisable: this.state.frameDisable,
topCommand :{ title :'панель кнопок(нажми меня) :',
button:{ new:{show:true},refresh:{show:true,disable:false}}},
topUserCommand : { padlo:{ title:'фуфля', show:true, disable: true,img:delLine }},
headRow : [{title:"номер",height:'120px',find:true},
{title:"фигамер",height:'160px'},
{title:"долбомер",height:'200px',find:true},
{title:"типа метры",height:'auto'},
{title:"попандос",height:'200px'}],
dataRow : [],
preEventHandler: this.preEventHandler.bind(this)
},
upload:{ beginRead:0, sizeRead:25, sizeUpload:1, trendLastUpload:null, sizeLastUpload:null }
}
и выводится в компоненте "форма" как то так:
{ Object.keys(this.state.component).map((index)=>{
return(
<React.Fragment key={index}>
{ this.state.component[index].feature( this.state.component[index].props )}
</React.Fragment>
)})
}
Как бы все замечательно работает! Но! вообще складывается такое нехорошее ощущение что, все чем нужно управлять, все нужно тащить на верхний уровень.
Ну собственно вот главный вопрос
Я создаю другую форму, и в ней тоже есть таблица. И я хочу использовать эту же компоненту. Но в этой другой таблице не нужно дочитывать данные. она маленькая. Но я все равно вынужден ПОМНИТЬ и в основной форме дописывать все пропсы которые никогда в ней не будут использоваться. Нехорошо. Хочу во второй форме чтобы не вспоминать про данные курсора,
чтобы оно само крутилось, т.е. курсор должен быть в базовом абстрактном классе - "таблица".
Есть другой еще вариант. Например делаеМ производный класс от класса таблица, Назовем его адреса. И он полноценно будет уже знать о данных и может нормально ими управлять, считывать
и т.д. И все будет находится в классе таблица. Все как и надо. Но и здесь есть но!
Если мне вдруг понадобится сохранить таблицу. Ну например у меня некая табличная форма которая потом будет сохранена в б.д. Таблица ничего о сохранениях знать не может.
Она даже не может узнать в какой момент это нужно сделать. В основной форме нажимается кнопка сохранить... и тут мне в основной форме нужно получить данные из вложенной компоненты.
Как? да никак..... без мухлежа - никак........
Советы типа context не давать. Вот на flux еще посматриваю.
Народ!!!!! Отзовись!!!