【发布时间】:2021-05-09 04:34:51
【问题描述】:
我有一个 App 组件,其中包含另外两个组件(A 和 B),它们应该是带有 <input type = "text"> 标签的搜索栏。 App 组件有两个函数,fetchA() 和 fetchB(),它们作为 props 传递给 A 和 B,并在各自的 <input> 标签中附加到 onChange 事件处理程序。因此,每当搜索栏中的文本输入发生变化时,都会调用它们在 App 组件中的相应函数。
const App = ()=>{
//...some code
functionA(term) {
//...some code
}
functionB(term) {
//...some code
}
return(
<div>
<A runWhenChanged = {functionA} />
<B runWhenChanged = {functionB} />
</div>
)
}
//... some code
A.js
const A = ({runWhenChanged})=>{
const [term,setTerm] = useState('');
const runOnChange = (event)=>{
setTerm(event.target.value);
runWhenChanged(term);
}
return(<div>
<input type = "text" onChange = {runOnChange} value = {term}/>
</div>
);
}
//...
B.js(和 A.js 差不多)
const B = ({ runWhenChanged }) => {
const [term, setTerm] = useState('');
const runOnChange = (event) => {
setTerm(event.target.value);
runWhenChanged(term);
}
return (
<div>
<input type="text" onChange={runOnChange} value={term}></input>
</div>
)
}
//...
这里的问题是,在第一次呈现时,当一个人在第一个搜索栏(由 A.js 呈现的那个)中键入内容然后单击页面上的 anywhere 时,键入的文本会自动复制到第二个搜索栏(由 B.js 呈现的那个)。我不明白这怎么可能发生。
编辑:
我了解我定义的代码本身可以正常工作。所以,我将添加一些关于我在回调函数中所做的更多细节。
const App = ()=>{
//...some code
const [termA,setTermA] = useState('');
const [termB,setTermB] = useState('');
useEffect(()=>{
//Returns an array using JavaScript's filter() function on an array of objects by
//checking if both the terms match the values of two particular keys in every
//object of the array
},[termA,termB]);
functionA(term) {
setTermA(term);
}
functionB(term) {
setTermB(term);
}
return(
<div>
<A runWhenChanged = {functionA} />
<B runWhenChanged = {functionB} />
</div>
)
}
//... some code
【问题讨论】:
-
你是否在
App级别的函数中操作值/term? -
@AlexanderStaroselsky 有道理。您可能正在对您的
App.js中的term值做一些事情,从而导致这种情况发生。 - 我能想到的唯一其他方法是,如果您不小心将相同的组件用于两个输入。 -
@AlexanderStaroselsky 是的,我正在使用它来设置
App组件中其他状态的值。我也在使用useEffect来检测状态的变化。我在编辑中提到过。 -
但是您是否曾经在
App或其他地方更改传递的term的值?
标签: javascript reactjs