У меня есть ребенок компонент таблицу, которая должна быть оказана каждый раз, когда его состояние меняется, но и, иногда, когда новые реквизита прибывают из родителей;ReactJS компоненты использовать реквизит или состояние, чтобы сделать
Таблица Компонент должен быть повторно использован и обрабатывает собственное состояние. Когда меняется его ширина, я использую setState (newTableWidth) для повторной обработки таблицы (пока это так хорошо).
Родитель приложение проекта является тот, который создает таблицу компонент и проходит начальную ширину.
Проблема: После изменений в родительском приложении (или в различных суб-компонентов), я хочу, чтобы обновить props.tableWidth и повторно вынести таблицу. Но есть и другие сценарии, в которых Проект оказывает Таблица без обновления реквизита.tableWidth.
Как можно Таблица Знать, когда нужно сделать рендеринг, используя опоры и когда делать себя с использованием состояния?
Пример кода:
class Table extends React.Component {
constructor(props) {
this.state = {
tableWidth: this.props.tableWidth
columnOrder
};
}
onWidthChange(newWidth){
this.setState({tableWidth:newWidth})
}
}
class Project extends React.Component {
render(){
if (this.onChangeTableWidth()){
let width = this.calculateTableWidth();
}
<Table tableWidth = {width}/>
}
}
но что делать, если нет никаких изменений в реквизитах, но я хочу _Table_ использовать реквизиты вместо состояния? , например: оказываю _Table_ с реквизитом: tableWidth = 100 Теперь _Table_ изменил свое состояние на tableWidth = 200 и теперь _Project_ компонент вызвал onChangeTableWidth() и необходимость повторной визуализации _Table_ снова tableWidth = 100 в этом случае реквизита не изменилось, поэтому моя таблицаWidth будет равна 200, а не 100 –
Я бы сказал, пусть только компонент контейнера (родителя) будет отвечать за изменение таблицыWidth, например, передать функцию через реквизиты, которая будет действовать как 'onChangeTableWidth (width)' обработчик и удерживать ширину в контейнере или, по крайней мере, всегда пропускать ширину, полученную с помощью параметров функции. Таким образом, существует только один источник истины, который является компонентом контейнера, и никогда не возникает путаницы, каким образом была установлена ширина, поскольку она все еще обновляется одинаково. Однако, как уже упоминалось, вы также можете использовать некоторый механизм управления государством, я рекомендую вам взглянуть на сокращение или mobx. –