【问题标题】:Why aren't todo items rendering in desired react component? (asp.net core 2.0/reactjs/typescript)为什么没有在所需的反应组件中呈现待办事项? (asp.net 核心 2.0/reactjs/typescript)
【发布时间】:2018-05-21 20:26:40
【问题描述】:

寻找一些关于我做错了什么的帮助/指导。我是 React/Typescript 的新手,这是我的第一个演示应用程序。我的环境是使用 asp.net core 2.0、react 和 typescript 的 Visual Studio 2017 Community。我的出发点是使用 react 锅炉项目模板。

我无法从 getTodosApi 方法中获取我的待办事项以在 ToDoItem 组件 ToDoItem.tsx 中打印);但是,当我省略该组件并仅在 ToDoList 组件 (index.tsx) 的渲染方法中的 LI 标记之间内联 {item.title} 时,它的打印效果很好。希望获得解决此问题的一些帮助/指导。提前致谢!

这里有几个屏幕截图:
Rendering from ToDoList component (Desired Result, but not desired component)
Unable to render todo items in desired ToDoItem component

我在下面包含了我正在使用的 2 个文件。

//*** index.tsx ***

import * as React from 'react';
import { RouteComponentProps } from 'react-router';
import { TodoItem, ITodoItemProps } from './ToDoItem';
import './css/index.css';

const getTodosApi = () => {
    return [
        {
            id: '1',
            title: 'task 1',
            completed: false
        },
        {
            id: '2',
            title: 'task 2',
            completed: false
        },
        {
            id: '3',
            title: 'task 3',
            completed: false
        }
    ];
}

interface ITodoItem {
    id: string,
    title: string,
    completed: boolean
}

interface ITodoListState {
    todos: ITodoItem[];
}

type ITodoListProps = RouteComponentProps<{}>;

export class TodoList extends React.Component<ITodoListProps, ITodoListState> {

    constructor() {
        super();
        this.state = {
            todos: []
        };
    }

    componentDidMount() {
        const todos = getTodosApi();
        this.updateTodoState(todos)
    }

    getTodosFromState = () => this.state.todos ? this.state.todos : []; 

    updateTodoState = (todos: ITodoItemProps[]) => {
        this.setState({
            todos: todos
        })
    }

    handleAddingTodoItem = (todoItem: ITodoItemProps) => {
        let todos = this.getTodosFromState()
        todos.push(todoItem);
        this.updateTodoState(todos);
    }

    handleDeletingTodoItem = (selectedItemToDelete: ITodoItemProps) => {
        const todos = this.getTodosFromState().filter(stateItem => selectedItemToDelete.title !== stateItem.title);
        this.updateTodoState(todos);
    }

    getTodoItemComponents = () => {

        const items = this.getTodosFromState();
        return [...items].map((item: ITodoItemProps) => {
            return (

                //THIS RENDERS EACH TODO ITEM
                //<li>{item.title}</li>

                //THIS DOES NOT RENDER EACH TODO ITEM
                <TodoItem key={item.id} { ...item } />

                //NOR, DOES THIS WORK...
                //<TodoItem
                //    completed={item.completed}
                //    id={item.id}
                //    title={item.title}
                //    key={item.id}
                ///>
            );
        });
    }

    public render () {
        return (
            <div id="todo-list">
                <h2>To Do Items</h2>
                <ul>{ this.getTodoItemComponents() }</ul>
            </div>
        );
    }
}


/**************************************/

//*** ToDoItem.tsx ***

/* HAVE ISSUE WITH GETTING EACH TODO ITEM TO PRINT OUT FROM THIS COMPONENT */

import * as React from 'react';
import './css/todoItem.css';

export interface ITodoItemProps {
    id: string,
    title: string,
    completed: boolean
}

export interface ITodoItemExtProps extends ITodoItemProps {
    key: string;
}

export const TodoItem = (props: ITodoItemExtProps) => {
    return (
        <li>
            <div className="todo-item">
                {props.title}
            </div>
        </li>
    );
};

这是我的项目中加载的内容(ASP.net core 2.0、React、Typescript):

"devDependencies": {
    "@types/history": "4.6.0",
    "@types/react": "15.0.35",
    "@types/react-dom": "15.5.1",
    "@types/react-hot-loader": "3.0.3",
    "@types/react-router": "4.0.12",
    "@types/react-router-dom": "4.0.5",
    "@types/webpack-env": "1.13.0",
    "aspnet-webpack": "^2.0.3",
    "aspnet-webpack-react": "^3.0.0",
    "awesome-typescript-loader": "3.2.1",
    "bootstrap": "3.3.7",
    "css-loader": "0.28.4",
    "eslint-config-airbnb": "^16.1.0",
    "eslint-plugin-import": "^2.12.0",
    "eslint-plugin-jsx-a11y": "^6.0.3",
    "eslint-plugin-react": "^7.8.2",
    "event-source-polyfill": "0.0.9",
    "extract-text-webpack-plugin": "^2.1.2",
    "file-loader": "0.11.2",
    "isomorphic-fetch": "2.2.1",
    "jquery": "3.2.1",
    "json-loader": "0.5.4",
    "react": "15.6.1",
    "react-dom": "15.6.1",
    "react-hot-loader": "3.0.0-beta.7",
    "react-router-dom": "4.1.1",
    "style-loader": "0.18.2",
    "typescript": "2.4.1",
    "url-loader": "0.5.9",
    "webpack": "^2.5.1",
    "webpack-hot-middleware": "^2.18.2"
}

【问题讨论】:

    标签: reactjs typescript asp.net-core


    【解决方案1】:

    嗯,看起来这是我的 IDE 的缓存情况。这段代码如我所愿。

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 2020-02-27
      • 2018-05-23
      • 2021-12-05
      • 2019-08-09
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多