Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React-表行中的输入失去对输入的关注_Reactjs_React Hooks_React Functional Component - Fatal编程技术网

Reactjs React-表行中的输入失去对输入的关注

Reactjs React-表行中的输入失去对输入的关注,reactjs,react-hooks,react-functional-component,Reactjs,React Hooks,React Functional Component,我正在对我们的表系统进行重构,以适应动态组件,而不仅仅是文本。除了一个问题外,我已经解决了我们旧桌子系统的所有问题。我在表行中有一个输入框,用于更新数据库中的翻译。基本上,每次你在输入框中输入一个字母后,输入就会失去焦点。看来整棵树都要重播了。我在map方法中创建的每一行上都有一个键集。我已经尝试了我能想到的每一个组合。我尝试一次将键附加到一个元素,混合元素,整个树,都使用静态元素_UUID,UUID是我们的SQL id UUID,在渲染时不会更改。我还尝试将name和id属性添加到它们的混合/

我正在对我们的表系统进行重构,以适应动态组件,而不仅仅是文本。除了一个问题外,我已经解决了我们旧桌子系统的所有问题。我在表行中有一个输入框,用于更新数据库中的翻译。基本上,每次你在输入框中输入一个字母后,输入就会失去焦点。看来整棵树都要重播了。我在map方法中创建的每一行上都有一个键集。我已经尝试了我能想到的每一个组合。我尝试一次将键附加到一个元素,混合元素,整个树,都使用静态
元素_UUID
,UUID是我们的SQL id UUID,在渲染时不会更改。我还尝试将name和id属性添加到它们的混合/全部。我试着把不同的函数移到不同的地方。我还尝试在几个组件上使用
React.memo
。我想我可能遗漏了一些关于键如何工作的信息。我附上了一个示例代码笔。我已经把它缩减到我们表格结构中的核心问题

const startingRows=[
{
id:“53b8f2f2-d4ef-4e99-a8bb-bd82c6186e4f”,
键:“登录”,
值:“连接”
},
{
id:“562295c5-be86-4d03-b31f-89127346096d”,
键:“名称”,
值:“nom”
},
{
id:“5d3b7d33-bf74-4ea2-ab15-3220ebe9d9e9”,
密钥:“密码”,
值:null
}
];
const useForm=()=>{
const[inputs,setInputs]=React.useState({});
常量handleInputChange=(e)=>{
e、 坚持();
设置输入((输入)=>({
…输入,
[e.target.name]:e.target.value
}));
};
返回{
handleInputChange,
投入
};
};
常量显示=()=>{
const{inputs,handleInputChange}=useForm();
const tableProps={
//传入TableRows中所需的根组件高级状态
TableRow:TableRow({
投入,
handleInputChange
}),
行:{计数:3,记录:开始行}
};
返回;
};
常量表=({TableRow,rows:{count,records}})=>{
返回;
};
//我的理解是,下面的键
//附加到map方法中的TableRow
//是什么让反应在
//哪些需要更新,哪些不需要更新
const TableContent=({TableRow,rows})=>{
返回(
单词
翻译
{rows&&rows.map((row)=>)}
);
};
const TableRow=({handleInputChange,inputs})=>({
//从这个意义上讲,键是指区域设置键
行:{id,key,value}
}) => {
返回(
{key}
);
};
常量输入=({id,name,onChange,value})=>{
返回;
};
render(,document.getElementById(“根”))
正文{
高度:100vh;
保证金:0;
显示:网格;
放置项目:中心;
}
.盒子{
宽度:300px;
h1{
字体大小:20px;
保证金:0.01雷姆0;
}
}

当呈现组件时,您需要再次添加焦点。要执行此操作,请将您的输入组件更改为此。我试过这个,它是有效的

const Input = ({ id, name, onChange, value }) => {
     React.useEffect(()=>{
        this.nameInput.focus();
  })
  
  return <input name={name}
           ref={(input) => { this.nameInput = input; }} 
           onChange={onChange} value={value} />;
};
const输入=({id,name,onChange,value})=>{
React.useffect(()=>{
this.nameInput.focus();
})
返回{this.nameInput=input;}}
onChange={onChange}value={value}/>;
};

当呈现组件时,您需要再次添加焦点。要执行此操作,请将您的输入组件更改为此。我试过这个,它是有效的

const Input = ({ id, name, onChange, value }) => {
     React.useEffect(()=>{
        this.nameInput.focus();
  })
  
  return <input name={name}
           ref={(input) => { this.nameInput = input; }} 
           onChange={onChange} value={value} />;
};
const输入=({id,name,onChange,value})=>{
React.useffect(()=>{
this.nameInput.focus();
})
返回{this.nameInput=input;}}
onChange={onChange}value={value}/>;
};

这似乎是朝着正确方向迈出的一步。对于第一个,我点击它会保持焦点,但是一旦你切换输入并键入一个字符,它就会跳转到第一个,这看起来是朝着正确的方向迈出的一步。对于第一个,我单击“进入”,它会保持焦点,但一旦切换输入并键入字符,它会将焦点跳到第一个。您的代码正在使用
setInputs
重新呈现输入更改时的body标记。随着状态的更新,组件将再次重新渲染。您可以做的是,跟踪
startingRows
json中的最后一次输入/键入,然后在聚焦时使用它。您的代码正在使用
setInputs
重新呈现输入更改时的body标记。随着状态的更新,组件将再次重新渲染。您可以做的是,在
startingRows
json中跟踪最后一次输入/键入,然后在聚焦时使用它。