Javascript 如何调用同一子组件的多个实例';来自父函数的s函数
我知道使用ref可以从父组件调用子组件中的函数。但我的问题是我有多个子组件实例,我需要在所有子组件中调用相同的函数Javascript 如何调用同一子组件的多个实例';来自父函数的s函数,javascript,reactjs,react-hooks,use-ref,Javascript,Reactjs,React Hooks,Use Ref,我知道使用ref可以从父组件调用子组件中的函数。但我的问题是我有多个子组件实例,我需要在所有子组件中调用相同的函数 //获取一个钩子函数 const{useState,useRef,useImperialiveHandle,useEffect}=React; 常量父项=({title})=>{ const childRef1=useRef(); const childRef2=useRef(); const childRef3=useRef(); const childRef4=useRef(
//获取一个钩子函数
const{useState,useRef,useImperialiveHandle,useEffect}=React;
常量父项=({title})=>{
const childRef1=useRef();
const childRef2=useRef();
const childRef3=useRef();
const childRef4=useRef();
const childRef5=useRef();
常量handleClick=()=>{
childRef1.current.increment()
childRef2.current.increment()
childRef3.current.increment()
childRef4.current.increment()
childRef5.current.increment()
}
返回(
{title}
handleClick()}>
点击我
);
};
常量Child=({num,childRef})=>{
const[count,setCount]=useState(0)
使用命令式句柄(childRef,()=>({
增量(){
//如果(文本可编辑)
设置计数(计数+1)
},
}));
useffect(()=>{
设置计数(num)
},[num])
返回(
{
计数
}
)
}
//渲染它
ReactDOM.render(
,
document.getElementById(“react”)
);代码>
跟踪父对象中的状态并将其作为道具传递给子对象:
const Parent = ({title}) => {
const [count, setCount] = useState(0);
return (
<div>
<p>{title}</p>
<Child count={count} />
<Child count={count} />
<Child count={count} />
</div>
)
}
const Parent=({title})=>{
const[count,setCount]=useState(0);
返回(
{title}
)
}
如果需要它们独立,请为状态使用数组:
const Parent = ({title}) => {
const [count, setCount] = useState([0,1,42,96]);
const onIncrement = index => {
// probably a better way to do this. just here for illustrative purposes
const newCount = [...count];
newCount.splice(index, 1, count[index] + 1);
setCount(newCount);
}
const incrementAll = () => setCount(count.map(x => x + 1));
return (
<div>
<p>{title}</p>
{ count.map((entry, index) => (
<Child
num={entry}
key={index}
onIncrement={() => onIncrement(index))} {/* if you want the child to be able to do it */}
/>
)) }
<button onClick={incrementAll}>Click Me</button>
</div>
)
}
const Parent=({title})=>{
const[count,setCount]=useState([0,1,42,96]);
const onIncrement=索引=>{
//这可能是一个更好的方法。这里只是为了说明
const newCount=[…count];
拼接(索引,1,计数[索引]+1);
setCount(newCount);
}
constincrementall=()=>setCount(count.map(x=>x+1));
返回(
{title}
{count.map((条目,索引)=>(
onIncrement(index))}{/*如果希望孩子能够这样做*/}
/>
)) }
点击我
)
}
跟踪父对象中的状态并将其作为道具传递给子对象:
const Parent = ({title}) => {
const [count, setCount] = useState(0);
return (
<div>
<p>{title}</p>
<Child count={count} />
<Child count={count} />
<Child count={count} />
</div>
)
}
const Parent=({title})=>{
const[count,setCount]=useState(0);
返回(
{title}
)
}
如果需要它们独立,请为状态使用数组:
const Parent = ({title}) => {
const [count, setCount] = useState([0,1,42,96]);
const onIncrement = index => {
// probably a better way to do this. just here for illustrative purposes
const newCount = [...count];
newCount.splice(index, 1, count[index] + 1);
setCount(newCount);
}
const incrementAll = () => setCount(count.map(x => x + 1));
return (
<div>
<p>{title}</p>
{ count.map((entry, index) => (
<Child
num={entry}
key={index}
onIncrement={() => onIncrement(index))} {/* if you want the child to be able to do it */}
/>
)) }
<button onClick={incrementAll}>Click Me</button>
</div>
)
}
const Parent=({title})=>{
const[count,setCount]=useState([0,1,42,96]);
const onIncrement=索引=>{
//这可能是一个更好的方法。这里只是为了说明
const newCount=[…count];
拼接(索引,1,计数[索引]+1);
setCount(newCount);
}
constincrementall=()=>setCount(count.map(x=>x+1));
返回(
{title}
{count.map((条目,索引)=>(
onIncrement(index))}{/*如果希望孩子能够这样做*/}
/>
)) }
点击我
)
}
我知道使用ref可以调用函数
太好了!在这种情况下,我们将使用相同的过程,但只是将其进一步扩展
设置组件或状态以保存子组件
this.state.children = [];
然后map()
var children = [1,2,3,4,5,6];
children.map((child) => {
return (
<Child
num={child}
ref={(instance) => {this.state.children[child] = instance}}
/>
);
});
我知道使用ref可以调用函数
太好了!在这种情况下,我们将使用相同的过程,但只是将其进一步扩展
设置组件或状态以保存子组件
this.state.children = [];
然后map()
var children = [1,2,3,4,5,6];
children.map((child) => {
return (
<Child
num={child}
ref={(instance) => {this.state.children[child] = instance}}
/>
);
});
我是用下面的钩子做的
//获取一个钩子函数
const{useState,useRef,useImperialiveHandle,useEffect}=React;
常量父项=({title})=>{
const[count,setCount]=useState(0);
const[children,setChildren]=useState(5);
常量[childRefs,setChildRefs]=useState([])
const handleClick=()=>childRefs.forEach(c=>c.current.increment())
useffect(()=>{
setChildRefs([…数组(children).keys()].map(e=>React.createRef()))
},[标题])
返回(
{title}
{
[…数组(子).keys()].map(e=>)
}
handleClick()}>
点击我
);
};
常量Child=({num,childRef})=>{
const[count,setCount]=useState(0)
使用命令式句柄(childRef,()=>({
增量(){
//如果(文本可编辑)
设置计数(计数+1)
},
}));
useffect(()=>{
设置计数(num)
},[num])
返回(
{
计数
}
)
}
//渲染它
ReactDOM.render(
,
document.getElementById(“react”)
);代码>
我是用下面这样的钩子做的
//获取一个钩子函数
const{useState,useRef,useImperialiveHandle,useEffect}=React;
常量父项=({title})=>{
const[count,setCount]=useState(0);
const[children,setChildren]=useState(5);
常量[childRefs,setChildRefs]=useState([])
const handleClick=()=>childRefs.forEach(c=>c.current.increment())
useffect(()=>{
setChildRefs([…数组(children).keys()].map(e=>React.createRef()))
},[标题])
返回(
{title}
{
[…数组(子).keys()].map(e=>)
}
handleClick()}>
点击我
);
};
常量Child=({num,childRef})=>{
const[count,setCount]=useState(0)
使用命令式句柄(childRef,()=>({
增量(){
//如果(文本可编辑)
设置计数(计数+1)
},
}));
useffect(()=>{
设置计数(num)
},[num])
返回(
{
计数
}
)
}
//渲染它
ReactDOM.render(
,
document.getElementById(“react”)
);代码>
虽然这个答案是正确的,但这绝不是理想的解决方案。将组件重组为不要求父级保留未知数量的引用可能更为理想,而t