Я все еще не так свободно владею ReactJS, Ant Design , Sagas и Reducers, как я думал: Я пытаюсь поддерживать / отлаживать одностраничное приложение, и я не уверен, какие файлы мне нужно настроить и как.
Цель состоит в том, чтобы добавить следующие <select>
в их render()
функцию в component.tsx
:
<Select showSearch
style={{ width: 150 }}
placeholder="Select entity"
// onChange={(e) => { this.handleSelectorChange("Entity", e) }} // to tackle later
// value={this.props.selectedEntity.toString()} // ------ " ------
>
<Option value="0">Option 0</Option>
{this.props.availableEntities.map((myEntity) =>
(<Option key={myEntity.Id.toString()}
value={myEntity.Id.toString()}>{myEntity.Name}</Option>))}
</Select>
В соответствующем container.tsx
я добавил:
const mapStateToProps = (state ) => ({
availableEntities: GeneralSelectors.getAvailableEntities(state),
});
В ответ я получаю только Option 0
вместо всех объектов (и даже в неправильном месте), см. Скриншот
Как получить параметры выбора, динамически генерируемые с использованием данных из API? Поскольку я не вижу, как вызывается сервер (с помощью Сеть (вкладка моего Chrome отладчика), я предполагаю, что что-то не так с сагами, но это только гипотеза.
Справочная информация
Для другой страницы -app (SPA) того же проекта, который уже имеет этот <select>
внутри, я нашел urls.ts
, который выглядит следующим образом
import UrlMap from "../UrlMap"
import * as Actions from "./actions"
import * as GeneralActions from "../general/actions"
export const urls = [
new UrlMap("myWorkingSPA",
() => [
Actions.load(),
GeneralActions.loadEntities(),
Actions.loadDifferencePositions()
])
];
* 1 037 * Я не знаю, где этот файл на самом деле вызывается, и что я должен изменить, чтобы включить его.
В соответствующем actions.ts
работающего SPA я нахожу
export function loadEntities() : Action {
return {
type: LOAD_ENTITIES
}
}
Я не уверен, что мой SPA также принимает это actions.ts
или нет.
* * * * * sagas.ts
одинаково для работающего SPA и для моего компонента:
function* loadEntities() {
const url = config.apiBaseUrl + "/api/Entities";
try {
const response: Response = yield fetch(url);
const json: Interfaces.Entity[] = yield response.json();
yield put(Actions.setEntities(json));
} catch (e) {
notification.error({ message: "Error", description: "Error loading Entities" });
}
}
function* watchLoadEntities() {
yield takeEvery(Actions.LOAD_ENTITIES, loadEntities);
}
Надеюсь, что это не слишком много информации, но я думаю, что все это связано с проблемой.
Ссылки