gpt4 book ai didi

javascript - 表单组件名称正在 react js 中的 antd 中更新

转载 作者:行者123 更新时间:2023-12-04 13:26:57 25 4
gpt4 key购买 nike

我正在使用antd表单创建任务列表,每个表单都有“提交”和“取消”按钮,每当用户创建任务时,都会生成一个新表单。我将任务数作为表单 ID。但是在更改字段时,我必须获取表单 Id,但表单 Id 正在更新任务计数值。
创建 Task.js

import React from "react";
import actions from "../redux/actions";
import store from "../redux/store";
import { Button } from 'antd';
import '../stylesheet/createTask.scss';
import {useSelector} from "react-redux";
import TaskForm from "./taskForm";
const CreateTask=()=>{
const addTask=useSelector((state)=>{
const {taskCount,task,templates}=state?.reducers
return {taskCount,task,templates}
})
const {taskCount,task,templates}=addTask;
const createTask=()=>{
templates.push(<div id={`task${taskCount+1}`} key={`template${taskCount}`}><TaskForm/></div>);
store.dispatch({type:actions.ON_ADD_TASK,payload:templates})
}
return(
<div className={"create-task"}>
<span className={"task-count"}>Task {taskCount} </span>
<Button onClick={createTask}>+</Button>
{templates && templates.map((data)=>data)}
</div>
)
}
export default CreateTask;
任务表单.js
import React, {useEffect, useState} from "react";
import { Form, Input, Button, Select,TimePicker,DatePicker, Space } from 'antd';
import moment from 'moment';
import {useSelector} from "react-redux";
import actions from "../redux/actions";
import store from "../redux/store";
import tasks from "../redux/reducers";


const layout = {
labelCol: {
span: 8,
},
wrapperCol: {
span: 16,
},
};
const tailLayout = {
wrapperCol: {
offset: 8,
span: 16,
},
};

const TaskForm = () => {
const [form] = Form.useForm();
const taskDetails=useSelector((state)=>{
const {taskCount,task}=state?.reducers
return {taskCount,task}
})
const [fields, setFields] = useState([
{ userData: {
task_msg:"",
assigned_user:"",
task_date: moment('2015-01-01', 'YYYY-MM-DD'),
task_time:moment('00:00:00', 'HH:mm:ss'),
time_zone: new Date().getTimezoneOffset(),
is_completed: 0,
}},
])
const userData = {

};

const{taskCount,task}=taskDetails;

const onFinish = (fieldsValue) => {
const values = {
...fieldsValue,
'task_date': fieldsValue['task_date'].format('YYYY-MM-DD'),
'task_time': fieldsValue['task_time'].format('HH:mm:ss'),
};
store.dispatch({type:actions.ON_SAVE_TASK,payload:values})
};

function onTimeChange(time, timeString) {
console.log(time, timeString);
}

function onDateChange(date, dateString) {
console.log(date, dateString);
}
const fieldsChange=(newFields)=>{
let id=newFields.target.id.split("_")[0].split("form")[1];
console.log("id", id);
console.log("new Fields", newFields.target.id)
setFields(newFields)
console.log("on field change" )
}
useEffect(()=>{
console.log("task Did update", task)
// setFields(tasks)
},[])

return (
<Form {...layout} form={form}
initialValues={userData}
name={`form${taskCount}`}
onChange={fieldsChange}
onFinish={onFinish}>
<Form.Item
label="Task Description"
name={"task_msg"}
rules={[
{
required: true,
},
]}
>
<Input />
</Form.Item>
<Form.Item
label="Task Description"
name="task_date"
rules={[
{
required: true,
},
]}
>
<Space direction="vertical">
<DatePicker onChange={onDateChange} defaultValue={ moment('2015-01-01', 'YYYY-MM-DD')} />
</Space>
</Form.Item>
<Form.Item
label="Task Description"
name={"task_time"}
rules={[
{
required: true,
},
]}
>
<Space direction="vertical">
<TimePicker onChange={onTimeChange} defaultValue={moment('00:00:00', 'HH:mm:ss')} />
</Space>
</Form.Item>
<Form.Item
name="assigned_user"
label="Assigned User"
rules={[
{
required: true,
},
]}
>
<Input />
</Form.Item>
<Form.Item {...tailLayout}>
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item>
<Form.Item {...tailLayout}>
<Button type="secondary" htmlType={"button"} >
Cancel
</Button>
</Form.Item>
</Form>
);
};

export default TaskForm;
Reducers.js:
import actions from "./actions";
const stateInit={
taskCount:0,
task:[],
userData:{
task_msg: '',
task_date: '',
task_time: 36000,
assigned_user: '',
time_zone: new Date().getTimezoneOffset(),
is_completed: 0,
},
templates:[],
};
export default function tasks(state=stateInit, action){
switch (action.type){
case actions.ON_ADD_TASK:{
return {...state,
taskCount: state.taskCount+1,
task:[...state.task,{userData:{...state.userData}}],
templates:action.payload,
};
}
case actions.ON_SAVE_TASK:{
return {
...state,
task:[]
}
}
default:{
return {
...state
}
}
}

}
表单 ID 随任务计数更新。引用图片:
enter image description here
enter image description here

最佳答案

您可以使用 props 为每个任务设置不同的表单 ID。
在 Task.js 中,像这样更改 createTask:

const createTask=()=>{
templates.push(<div id={`task${taskCount+1}`} key=
{`template${taskCount}`}><TaskForm taskId={taskCount}/></div>);
store.dispatch({type:actions.ON_ADD_TASK,payload:templates})
}
然后在 TaskForm.js 中像这样更改您的表单:
return (
<Form {...layout} form={form}
initialValues={userData}
name={`form${props.taskId}`}
onChange={fieldsChange}
onFinish={onFinish}>
....
</Form>

关于javascript - 表单组件名称正在 react js 中的 antd 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67931319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com