Что такое dispatch
в вашем actionsFormatter
? Он не определен ни в области действия actionsFormatter
, ни в области действия actionsFormatter
. Это проблема, о которой говорит вам интерпретатор javascript.
Одним из возможных исправлений является импорт в магазин приставок
store.js
export const store = createStore(...)
EnvironmentList.js
import { store } from './path/to/store.js'
// ...
const actionsFormatter = (cell, row) => {
const { dispatch } = store
const id = row.id
// ...
};
Таким образом, вы получите dispatch
доступный в actionsFormatter
теле.
Другим способом является предоставление сопоставленного метода через цепочку connect -> EnvironmentList -> actionsFormatter. Сделайте то, что Арно Христос предложил в своем ответе , а затем рефакторинг кода:
const EnvironmentList = (props) => (
<BootstrapTable
keyField='id'
data={ props.store.environnements }
columns={ columns(props.removeEnvironment) }
selectRow={selectRow}
pagination={ paginationFactory() }
filter={ filterFactory() }
striped hover condensed
/>
);
const actionsFormatter = (removeEnvironment) => (cell, row) => {
const id=row.id
return (
<button className="btn btn-danger"
onClick={() => {
removeEnvironment({ id });
}}
>Delete</button>
);
};
const columns = (removeEnvironment) => [{
dataField: 'id',
text: 'ID'
}, {
dataField: 'nom',
text: 'Nom',
filter: textFilter()
}, {
dataField: 'actions',
text: 'Action',
formatter: actionsFormatter(removeEnvironment)
} ];
Итак, подключенный EnvironmentList получил необходимый метод removeEnvironment для своих реквизитов. Затем мы передаем его создателю столбцов, который передал его создателю actionsFormatter.