问题描述
我正在使用react表,每当单击添加列按钮时,我都需要添加一列。数据以[{"C1: text,"C2": text,"StrategicInitiatives": text,"G1": text}]
这样的json格式传入,我希望能够单击添加列按钮并插入更新json的列。因此,当我单击列时,它应该发送一个像/* eslint-disable jsx-a11y/click-events-have-key-events */
/* eslint-disable jsx-a11y/no-static-element-interactions */
/* eslint-disable guard-for-in */
/* eslint-disable no-restricted-Syntax */
/* eslint-disable react/jsx-props-no-spreading */
import React,{ useState } from 'react';
import styled from 'styled-components';
import { useTable } from 'react-table';
import data from '../Data/data.json';
import './Table.css';
const Styles = styled.div`
table {
border-spacing: 0;
border: 1px solid black;
width: 970px;
tr {
:last-child {
td {
border-bottom: 0;
height: 500px;
}
}
}
th,td {
margin: 0;
padding: 0.5rem;
border-bottom: 1px solid black;
border-right: 1px solid black;
:last-child {
border-right: 0;
}
}
}
`;
const HarveyBall = (initialValue) => {
const [value,setValue] = useState(initialValue);
const onClick = () => {
if(value === 'Empty'){
setValue('Quarter');
}
if(value === 'Quarter'){
setValue('Half');
}
if(value === 'Half'){
setValue('Three-Quarter');
}
if(value === 'Three-Quarter'){
setValue('Full');
}
if(value === 'Full'){
setValue('Empty');
}
};
if(value === "Empty"){
return (
<div type="button" label="Empty" className="harvey none" onClick={onClick} />
);
}
if(value === "Quarter"){
return (
<div type="button" label="Quarter" className="harvey quarters quarter" onClick={onClick} />
);
}
if(value === "Half"){
return (
<div type="button" label="Half" className="harvey quarters half" onClick={onClick} />
);
}
if(value === "Three-Quarter"){
return (
<div type="button" label="Three-Quarter" className="harvey quarters three-quarters" onClick={onClick} />
);
}
if(value === "Full"){
return (
<div type="button" label="Full" className="harvey quarters full" onClick={onClick} />
);
}
return null;
};
const defaultPropGetter = () => ({});
const EditableCell = ({
value: initialValue,row: { index },column: { id },updateMyData,}) => {
const [value,setValue] = React.useState(initialValue);
const onChange = e => {
setValue(e.target.value);
};
const onBlur = () => {
updateMyData(index,id,value);
};
React.useEffect(() => {
setValue(initialValue);
},[initialValue]);
return id === "strategicInitiative" || index === 5 ? <textarea value={value} onChange={onChange} onBlur={onBlur} style={{ width: '100%',focus: 'none',outline: 'none',border: 'none',resize: 'none',expand: {height: '1em',width: '50%',padding: '3px'}}}/> : HarveyBall(initialValue);
};
const defaultColumn = {
Cell: EditableCell,};
function Table({ columns,getHeaderProps = defaultPropGetter,}) {
const {
getTableProps,getTableBodyProps,headerGroups,rows,prepareRow,} = useTable({
columns,data,defaultColumn,});
return (
<table {...getTableProps()}>
<thead>
{headerGroups.map(headerGroup => (
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map(column => column.hideHeader === false ? null : (
<th
{...column.getHeaderProps([
{
className: column.className,style: column.style,},getHeaderProps(column),])}
>
{column.render('Header')}
</th>
))}
</tr>
))}
</thead>
<tbody {...getTableBodyProps()}>
{rows.map((row) => {
prepareRow(row);
return (
<tr {...row.getRowProps()}>
{row.cells.map(cell => {
return <td {...cell.getCellProps()}>{cell.render('Cell')}</td>;
})}
</tr>
);
})}
</tbody>
</table>
);
}
export default function MatrixTable() {
const addTask = () =>
<>
<div>Tasks</div>
<button>Add Column</button>
</>;
const addGoal = () =>
<>
<div>Goals</div>
<button>Add Column</button>
</>;
const columns = React.useMemo(
() => [
{
Header: addTask(),accessor: 'tasks',style: {
width: '255px',height: '49px',background: '#fdf5ed',fontSize: '16px',color: '#f2994a',textAlign: 'center',lineHeight: '49px',columns: [
{
hideHeader: false,accessor: 'C1'
},{
hideHeader: false,accessor: 'C2'
},accessor: 'C3'
},accessor: 'C4'
},accessor: 'C5'
}
]
},{
Header: "Strategic Inititiatives",accessor: "strategicInitiative ",style: {
color: '#323b3e',width: '460px',background: '#f2f2f2',columns: [
{
hideHeader: false,accessor: 'strategicInitiative'
}
]
},{
Header: addGoal(),accessor: 'goals',style: {
color: '#56ccf2',width: '255px',background: '#f8fcfe',accessor: 'G1'
},{
hideHeader: false,accessor: 'G2'
},accessor: 'G3'
},accessor: 'G4'
},accessor: 'G5'
}
]
},],[]
);
const [,setData] = useState(data);
const updateMyData = (rowIndex,columnId,value) => {
setData(old =>
old.map((row,index) => {
if (index === rowIndex) {
return {
...old[rowIndex],[columnId]: value,};
}
return row;
})
);
};
return (
<Styles>
<Table columns={columns} data={data} updateMyData={updateMyData}/>
</Styles>
);
}
这样的json并动态添加列。
代码如下:
ffmpeg -i video.mp4 -i audio.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a copy output.mkv
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)