Ниже я покажу два стиля, и вы захотите выбрать их в зависимости от того, насколько логика компонентов связана друг с другом.
Стиль 1 - Относительно связанные компоненты могут быть созданы с помощью ссылок обратного вызова, например, в ./components/App.js
...
<SomeItem
ref={(instance) => {this.childA = instance}}
/>
<SomeOtherItem
ref={(instance) => {this.childB = instance}}
/>
И тогда вы можете использовать общие функции между ними вот так ...
this.childA.investigateComponent(this.childB);
this.childB.makeNotesOnComponent(this.childA);
Стиль 2 - компоненты служебного типа могут быть созданы таким образом в ./utils/time.js
...
export const getTimeDifference = function (start, end) {
}
А потом их можно использовать вот так, в ./components/App.js
...
import React from 'react';
import {getTimeDifference} from './utils/time.js';
export default class App extends React.Component {
someFunction() {
console.log(getTimeDifference("19:00:00", "20:00:00"));
}
}
Что использовать?
Если логика относительно взаимосвязана (они используются вместе только в одном приложении), тогда вы должны разделять состояния между компонентами. Но если ваша логика имеет отдаленное отношение (например, утилита для математики, утилита для форматирования текста), тогда вам следует создать и импортировать функции класса util.