Reactjs 为什么react-sortable hoc basic示例无法使用typescript编译?
下面是来自的基本示例Reactjs 为什么react-sortable hoc basic示例无法使用typescript编译?,reactjs,typescript,react-sortable-hoc,Reactjs,Typescript,React Sortable Hoc,下面是来自的基本示例 import React,{Component}来自'React'; 从'react dom'导入{render}; 从'react sortable hoc'导入{SortableContainer,SortableElement,arrayMove}; const SortableItem=SortableElement(({value})=> {value} ); const SortableList=SortableContainer(({items})=>{ 返回
import React,{Component}来自'React';
从'react dom'导入{render};
从'react sortable hoc'导入{SortableContainer,SortableElement,arrayMove};
const SortableItem=SortableElement(({value})=>
{value}
);
const SortableList=SortableContainer(({items})=>{
返回(
{items.map((值,索引)=>(
))}
);
});
类SortableComponent扩展了组件{
状态={
项目:[‘项目1’、‘项目2’、‘项目3’、‘项目4’、‘项目5’、‘项目6’],
};
onSortEnd=({oldIndex,newIndex})=>{
这是我的国家({
items:arrayMove(this.state.items、oldIndex、newIndex),
});
};
render(){
返回;
}
}
render(,document.getElementById('root'));
我不得不稍微修改上面的代码以适应typescript导入语法,下面的屏幕截图显示了我不确定如何修复的错误:
以下是与上述屏幕截图对应的代码:
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {SortableContainer, SortableElement, arrayMove} from 'react-sortable-hoc';
const SortableItem = SortableElement(({value}) =>
<li>{value}</li>
);
const SortableList = SortableContainer(({items}) => {
return (
<ul>
{items.map((value, index) => (
<SortableItem key={`item-${index}`} index={index} value={value} />
))}
</ul>
);
});
class SortableComponent extends React.Component {
state = {
items: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6'],
};
onSortEnd = ({oldIndex, newIndex}) => {
this.setState({
items: arrayMove(this.state.items, oldIndex, newIndex),
});
};
render() {
return <SortableList items={this.state.items} onSortEnd={this.onSortEnd} />;
}
}
ReactDOM.render(<SortableComponent/>, document.getElementById('root'));
import*as React from'React';
从“react dom”导入*作为react dom;
从'react sortable hoc'导入{SortableContainer,SortableElement,arrayMove};
const SortableItem=SortableElement(({value})=>
{value}
);
const SortableList=SortableContainer(({items})=>{
返回(
{items.map((值,索引)=>(
))}
);
});
类SortableComponent扩展了React.Component{
状态={
项目:[‘项目1’、‘项目2’、‘项目3’、‘项目4’、‘项目5’、‘项目6’],
};
onSortEnd=({oldIndex,newIndex})=>{
这是我的国家({
items:arrayMove(this.state.items、oldIndex、newIndex),
});
};
render(){
返回;
}
}
ReactDOM.render(,document.getElementById('root'));
我不知道如何解析这些错误的错误文本。由于这个项目在GitHub上有5k+个星星,我想我有一些配置问题,但我似乎不知道它是什么
以下是剩下的两个错误:
一,
[ts]属性“items”不存在于类型“IntrinsicattAttributes”上&
内在类属性
二,
[ts]属性“value”在类型“IntrinsicattAttributes”上不存在&
内在类属性
在我看来,错误文本好像没有正确地提取组件包装语法,但我自己不熟悉这种语法,因此我不确定是否正确地诊断了问题或如何修复它
感谢您的帮助。文档中基本示例中的代码是JavaScript 下面是转换为TypeScript的基本示例:
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { arrayMove, SortableContainer, SortableElement } from 'react-sortable-hoc';
const SortableItem = SortableElement(({value}: {value: string}) =>
<li>{value}</li>
);
const SortableList = SortableContainer(({items}: {items: string[]}) => {
return (
<ul>
{items.map((value, index) => (
<SortableItem key={`item-${index}`} index={index} value={value} />
))}
</ul>
);
});
class SortableComponent extends React.Component<{}, {items: string[]}> {
constructor(props: {}) {
super(props);
this.state = {
items: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6']
}
}
public render() {
return <SortableList items={this.state.items} onSortEnd={this.onSortEnd} />;
}
private onSortEnd = ({oldIndex, newIndex}: {oldIndex: number, newIndex: number}) => {
this.setState({
items: arrayMove(this.state.items, oldIndex, newIndex),
});
};
}
ReactDOM.render(<SortableComponent/>, document.getElementById('root'));
import*as React from'React';
从“react dom”导入*作为react dom;
从'react-sortable-hoc'导入{arrayMove,SortableContainer,SortableElement};
const SortableItem=SortableElement(({value}:{value:string})=>
{value}
);
const SortableList=SortableContainer(({items}:{items:string[]})=>{
返回(
{items.map((值,索引)=>(
))}
);
});
类SortableComponent扩展了React.Component{
构造函数(props:{}){
超级(道具);
此.state={
项目:[‘项目1’、‘项目2’、‘项目3’、‘项目4’、‘项目5’、‘项目6’]
}
}
公共渲染(){
返回;
}
private onSortEnd=({oldIndex,newIndex}:{oldIndex:number,newIndex:number})=>{
这是我的国家({
items:arrayMove(this.state.items、oldIndex、newIndex),
});
};
}
ReactDOM.render(,document.getElementById('root'));
如果有人需要我在ts中使用mui的可选拖动手柄的代码,我还提供了“packageData”示例,如果您需要查看界面,请告诉我
import React, { Component } from 'react';
import {
SortableContainer,
SortableElement,
SortableHandle
} from 'react-sortable-hoc';
import arrayMove from 'array-move';
import { packageData } from '../../data/packagesData';
import { List } from '@material-ui/core';
import ListItem from '../../components/UI/ListItem/ListItem';
import EditIcon from '@material-ui/icons/DragIndicator';
import { PackageResAdmin } from '../../ts/apiTs';
const DragHandle = SortableHandle(() => <EditIcon />);
const SortableItem = SortableElement(
({ id, galleryId, translations }: PackageResAdmin) => (
<ListItem
id={id}
children={<DragHandle />}
galleryId={galleryId}
translations={translations}
/>
)
);
const SortableContainerWrapper = SortableContainer(
({ children }: { children: {}[] }) => {
return <List>{children}</List>;
}
);
class DndComponent extends Component {
state = { packageData };
private onSortEnd = ({
oldIndex,
newIndex
}: {
oldIndex: number;
newIndex: number;
}) => {
this.setState({
packageData: arrayMove(this.state.packageData, oldIndex, newIndex)
});
};
render() {
console.log(this.state);
return (
<SortableContainerWrapper onSortEnd={this.onSortEnd} useDragHandle>
{this.state.packageData.map((res, index) => (
<SortableItem
key={`item-${index}`}
index={index}
id={res.id}
galleryId={res.galleryId}
translations={res.translations}
/>
))}
</SortableContainerWrapper>
);
}
}
export default DndComponent;
export const packageData: PackageResAdmin[] = [
{
galleryId: 1,
id: 1,
translations: {
[Language.CS]: {
additionalInfo: 'additionalInfo',
content: 'content',
language: Language.CS,
parentId: 1,
title: 'eden'
},
[Language.EN]: {
additionalInfo: 'additionalInfo',
content: 'content',
language: Language.EN,
parentId: 1,
title: 'one'
}
}
},
{
galleryId: 1,
id: 2,
translations: {
[Language.CS]: {
additionalInfo: 'additionalInfo',
content: 'content',
language: Language.CS,
parentId: 1,
title: 'dva'
},
[Language.EN]: {
additionalInfo: 'additionalInfo',
content: 'content',
language: Language.EN,
parentId: 1,
title: 'two'
}
}
}
];
import React,{Component}来自'React';
进口{
可分拣集装箱,
可排序元素,
可分拣手柄
}来自“react sortable hoc”;
从“数组移动”导入arrayMove;
从“../../data/packagesData”导入{packageData};
从'@material ui/core'导入{List};
从“../../components/UI/ListItem/ListItem”导入ListItem;
从“@material ui/icons/DragIndicator”导入编辑图标;
从“../../ts/apiTs”导入{PackageResAdmin};
const DragHandle=可排序句柄(()=>);
const SortableItem=SortableElement(
({id,galleryId,translations}:PackageResAdmin)=>(
)
);
const sortableContainerRapper=SortableContainer(
({children}:{children:{}[]})=>{
返回{children};
}
);
类DndComponent扩展组件{
状态={packageData};
private onSortEnd=({
旧索引,
新索引
}: {
oldIndex:编号;
新索引:编号;
}) => {
这是我的国家({
packageData:arrayMove(this.state.packageData、oldIndex、newIndex)
});
};
render(){
console.log(this.state);
返回(
{this.state.packageData.map((res,index)=>(
))}
);
}
}
导出默认的DndComponent;
导出常量packageData:PackageResAdmin[]=[
{
加列利德:1,
id:1,
翻译:{
[Language.CS]:{
additionalInfo:“additionalInfo”,
内容:“内容”,
语言:language.CS,
父ID:1,
标题:“伊甸园”
},
[Language.EN]:{
additionalInfo:“additionalInfo”,
内容:“内容”,
语言:language.EN,
父ID:1,
标题:“一”
}
}
},
{
加列利德:1,
id:2,
翻译:{
[Language.CS]:{
additionalInfo:“additionalInfo”,
内容:“内容”,
语言:language.CS,
父ID:1,
标题:“dva”
},
[Language.EN]:{
additionalInfo:“additionalInfo”,
内容:“内容”,
语言:language.EN,
父ID:1,
标题:“两个”
}
}
}
];
图像和屏幕截图可以很好地添加到帖子中,但请确保没有它们的帖子仍然清晰有用。如果您发布代码图像或错误消息
import React, { Component } from 'react';
import {
SortableContainer,
SortableElement,
SortableHandle
} from 'react-sortable-hoc';
import arrayMove from 'array-move';
import { packageData } from '../../data/packagesData';
import { List } from '@material-ui/core';
import ListItem from '../../components/UI/ListItem/ListItem';
import EditIcon from '@material-ui/icons/DragIndicator';
import { PackageResAdmin } from '../../ts/apiTs';
const DragHandle = SortableHandle(() => <EditIcon />);
const SortableItem = SortableElement(
({ id, galleryId, translations }: PackageResAdmin) => (
<ListItem
id={id}
children={<DragHandle />}
galleryId={galleryId}
translations={translations}
/>
)
);
const SortableContainerWrapper = SortableContainer(
({ children }: { children: {}[] }) => {
return <List>{children}</List>;
}
);
class DndComponent extends Component {
state = { packageData };
private onSortEnd = ({
oldIndex,
newIndex
}: {
oldIndex: number;
newIndex: number;
}) => {
this.setState({
packageData: arrayMove(this.state.packageData, oldIndex, newIndex)
});
};
render() {
console.log(this.state);
return (
<SortableContainerWrapper onSortEnd={this.onSortEnd} useDragHandle>
{this.state.packageData.map((res, index) => (
<SortableItem
key={`item-${index}`}
index={index}
id={res.id}
galleryId={res.galleryId}
translations={res.translations}
/>
))}
</SortableContainerWrapper>
);
}
}
export default DndComponent;
export const packageData: PackageResAdmin[] = [
{
galleryId: 1,
id: 1,
translations: {
[Language.CS]: {
additionalInfo: 'additionalInfo',
content: 'content',
language: Language.CS,
parentId: 1,
title: 'eden'
},
[Language.EN]: {
additionalInfo: 'additionalInfo',
content: 'content',
language: Language.EN,
parentId: 1,
title: 'one'
}
}
},
{
galleryId: 1,
id: 2,
translations: {
[Language.CS]: {
additionalInfo: 'additionalInfo',
content: 'content',
language: Language.CS,
parentId: 1,
title: 'dva'
},
[Language.EN]: {
additionalInfo: 'additionalInfo',
content: 'content',
language: Language.EN,
parentId: 1,
title: 'two'
}
}
}
];