对 React-Data-Grid 中的某些列进行验证
Doing validation on certain columns in React-Data-Grid
我想在 react-data-grid table 上实现验证,其中只有我在列本身中定义的单元格才会被验证,并且只有在状态设置为 true 时才会进行验证。
所以我这里有以下代码
const [ validateMode, setValidateMode ] = useState(false);
const errorBackground = { backgroundColor: 'some error color in here' }
const DescriptionFormatter = props => {
const { value, row } = props;
let template;
if (!validateMode){
template = value;
}
if (validateMode){
let validationStyling = Boolean(value.length) ? {} : errorBackground;
template = <div style={{ ...validationStyling }}>value</div>
}
return template;
}
const tableCols = [
{
key: 'id',
name: 'No'
},
{
key: 'name',
name: 'Name',
editable: !disabled,
editor: <AutoComplete options={nameList} />
},
{
key: 'description',
name: 'Description',
editable: !disabled,
formatter: DescriptionFormatter
}
];
按下按钮时,它将触发 validateMode 状态为真,当发生这种情况时,我希望描述列验证单元格,如果值为空,则 return 错误背景单元格,否则默认背景如果其中有值(简单检查值是否为空)。
当我按下按钮时,我似乎无法使 validateMode 控制台日志正常工作。它仅在页面初始化或单元格更改时显示(例如向其插入值时)。我无法在此处进行验证,除非我做错了。
请帮我解决这个问题。
不敢相信我在回答我自己的问题哈哈
反正我已经找到答案了。无法在列定义处进行验证。它必须在数据网格的单元级别上完成。您可以将状态传递给单元格并在那里进行验证,并通过使用条件类名更改单元格的 CSS 以显示验证是真还是假。
使其工作的代码片段
import ReactDataGrid, { Row, Cell } from "react-data-grid";
/*
Validator is a state passed from the parent page that indicates whether page is on validation or not, in case
if dev want the table to validate when a trigger hits the page (like submit button?)
*/
const { validator } = props;
const CustomCell = props => {
let valueValidation = false;
if (validator){
/* Insert custom validation in here */
return ( <Cell {...props} className={ validator && valueValidation ? '' : classes.error } /> );
}
/* If not in validation mode, display normal rows */
if (!validator){
return ( <Cell {...props} /> );
}
}
const CustomRow = props => {
return ( <Row {...props} cellRenderer={cellProps => <CustomCell {...cellProps} />} /> );
}
return (
<ReactDataGrid
rowRenderer={CustomRow}
/>
);
我想在 react-data-grid table 上实现验证,其中只有我在列本身中定义的单元格才会被验证,并且只有在状态设置为 true 时才会进行验证。
所以我这里有以下代码
const [ validateMode, setValidateMode ] = useState(false);
const errorBackground = { backgroundColor: 'some error color in here' }
const DescriptionFormatter = props => {
const { value, row } = props;
let template;
if (!validateMode){
template = value;
}
if (validateMode){
let validationStyling = Boolean(value.length) ? {} : errorBackground;
template = <div style={{ ...validationStyling }}>value</div>
}
return template;
}
const tableCols = [
{
key: 'id',
name: 'No'
},
{
key: 'name',
name: 'Name',
editable: !disabled,
editor: <AutoComplete options={nameList} />
},
{
key: 'description',
name: 'Description',
editable: !disabled,
formatter: DescriptionFormatter
}
];
按下按钮时,它将触发 validateMode 状态为真,当发生这种情况时,我希望描述列验证单元格,如果值为空,则 return 错误背景单元格,否则默认背景如果其中有值(简单检查值是否为空)。
当我按下按钮时,我似乎无法使 validateMode 控制台日志正常工作。它仅在页面初始化或单元格更改时显示(例如向其插入值时)。我无法在此处进行验证,除非我做错了。
请帮我解决这个问题。
不敢相信我在回答我自己的问题哈哈
反正我已经找到答案了。无法在列定义处进行验证。它必须在数据网格的单元级别上完成。您可以将状态传递给单元格并在那里进行验证,并通过使用条件类名更改单元格的 CSS 以显示验证是真还是假。
使其工作的代码片段
import ReactDataGrid, { Row, Cell } from "react-data-grid";
/*
Validator is a state passed from the parent page that indicates whether page is on validation or not, in case
if dev want the table to validate when a trigger hits the page (like submit button?)
*/
const { validator } = props;
const CustomCell = props => {
let valueValidation = false;
if (validator){
/* Insert custom validation in here */
return ( <Cell {...props} className={ validator && valueValidation ? '' : classes.error } /> );
}
/* If not in validation mode, display normal rows */
if (!validator){
return ( <Cell {...props} /> );
}
}
const CustomRow = props => {
return ( <Row {...props} cellRenderer={cellProps => <CustomCell {...cellProps} />} /> );
}
return (
<ReactDataGrid
rowRenderer={CustomRow}
/>
);