反应编辑表单创建

时间:2018-05-03 04:33:44

标签: javascript forms reactjs jsx

我刚开始使用React,坚持编辑表格。我需要预先填充输入,但也能够编辑它。如果我把defaultValue,我不能把值放在input元素上。此时我可以输入输入,但我必须编辑两个字段(表单有两个字段)才能保存这两个值。我应该怎么做?

实施例: 我有食谱名称和成分,我打开模态与编辑形式,它预先填充,我添加一些成分,但保持名称不变。它节省了:

import numpy as np
import pyopencl as cl

np.random.seed(5)

N=2500*56
A=6
t=64

plat = cl.get_platforms()
devices = plat[0].get_devices()
ctx = cl.Context([devices[0]])
queue = cl.CommandQueue(ctx)

actions=np.random.randint(0,2,(N,A,t)).flatten(order='F')
tau=np.arange(1,np.add(t,1))
d=np.random.rand(N).astype(np.float32)
baseAct=np.empty((N,A)).astype(np.float32).flatten(order='F')

mf = cl.mem_flags
actions_buf = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, 
hostbuf=actions)
tau_buf = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=tau)
d_buf = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=d)
loc_buf = cl.LocalMemory(np.dtype(np.float32).itemsize*t)
baseAct_buf = cl.Buffer(ctx, mf.WRITE_ONLY, baseAct.nbytes)

prg = cl.Program(ctx, """
    __kernel void calc_baseAct(__global const int *actions,
    __global const int *tau,
    __global const float *d,
    __local float *loc,
    __global float *baseAct,
    int N,
    int A,
    int t)
    {
      int xg = get_global_id(0);
      int yg = get_global_id(1);
      int zg = get_global_id(2);
      int xl = get_local_id(0);
      int yl = get_local_id(1);
      int zl = get_local_id(2);
      int xw = get_group_id(0);
      int yw = get_group_id(1);
      int zw = get_group_id(2);

      loc[xl+N*yl+N*A*zl] = actions[xg+N*yg+N*A*zg]*pow(tau[zg],-d[xg]);
      barrier(CLK_LOCAL_MEM_FENCE);


      for(uint s = t/2; s > 0; s >>= 1) {
        if(zl < s) {
          loc[xl+N*yl+N*A*zl] += loc[xl+N*yl+N*A*(zl+s)];
        }
        barrier(CLK_LOCAL_MEM_FENCE);
      }    
      if(zl == 0) baseAct[xw+N*yw+N*A*zw] = loc[xl+N*yl+N*A*zl];

    }
    """).build()

prg.calc_baseAct(queue, (N,A,t), (1,1,t), actions_buf, tau_buf, d_buf, 
loc_buf, baseAct_buf, np.int32(N), np.int32(A), np.int32(t))
cl.enqueue_copy(queue, baseAct, baseAct_buf)

baseAct=baseAct.reshape((N,A), order='F')

&#13;
&#13;
{name: "", ingredients: ing1,ing2,newIngredient}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

将值存储在状态中。首先,在componentDidMount方法中添加它们,以便在加载表单组件时使用它们:

ComponentDidMount() {
   const { recipeName  } = this.props;
   this.setState({ recipeName });
}

然后,每个onChange的{​​{1}}更新状态。因此,无论您何时保存值,都可以保存组件的状态:

<input>

当您到达updateInputValue(e) { const { target: {value} } = e; this.setState({ recipeName: value }); } <input type="text" className="form-control" value={this.state.recipeName} name="recipeName" placeholder="Recipe name" onChange={this.updateInputValue}/> 时,我建议您使用Redux Form

答案 1 :(得分:0)

您需要将传入的道具的值放入初始状态。您需要在构造函数中执行此操作。

目前你的状态只是通过更改事件进行更新,但是初始状态从未设置过(很可能无论如何。我只是猜测这个,因为你没有包含完整的代码)。