Javascript 反应高阶组件,修改其中已包装组件的输入元素
我有一个像这样的高阶分量Javascript 反应高阶组件,修改其中已包装组件的输入元素,javascript,reactjs,forms,redux,react-hooks,Javascript,Reactjs,Forms,Redux,React Hooks,我有一个像这样的高阶分量 import React from 'react'; const NewComponent = ( WrappedComponent ) => { class UpdatedComponent extends React.Component { render() { // Custom Hook // const values = useCustomHook(InitialState);
import React from 'react';
const NewComponent = ( WrappedComponent ) => {
class UpdatedComponent extends React.Component {
render() {
// Custom Hook
// const values = useCustomHook(InitialState);
return(
<WrappedComponent />
)
}
}
return UpdatedComponent;
};
export { NewComponent };
从“React”导入React;
常量新组件=(WrappedComponent)=>{
类UpdatedComponent扩展了React.Component{
render(){
//定制挂钩
//常量值=useCustomHook(初始状态);
返回(
)
}
}
返回更新组件;
};
出口{NewComponent};
还有像这样的包装组件
const App = () => {
return(
<Form>
<input
type = 'text'
placeholder = 'Enter your name' />
<input
type = 'email'
placeholder = 'Enter your email' />
<button
type = 'submit'>
Submit
</button>
</Form>
)
}
const-App=()=>{
返回(
提交
)
}
问题是我想迭代包装组件中的输入元素并构造一个复合状态,我将把一个参数传递给hoc中的定制钩子?有没有办法实现这一功能?我认为您不应该解析jsx并从中创建数据,但您还没有真正演示为什么需要这样做,并且可能有一个有效的用例 下面是如何解析jsx(由其创建的html):
const useCustomHook=(state)=>{
如果(状态!==null){
log('自定义挂钩,状态为:',状态);
}
};
常量形式=({children})=>{
const[state,setState]=React.useState(null);
const ref=React.useRef();
useCustomHook(州);
React.useffect(()=>{
调试器;
设定状态(
Array.from(ref.current.querySelectorAll('input')).map(
({type,placeholder})=>({
类型,
占位符,
})
)
);
}, []);
返回{children};
};
常量应用=()=>{
返回(
提交
);
};
ReactDOM.render(,document.getElementById('root'))代码>
请展示更多示例,您告诉我们关于带有输入元素的表单-您能展示一个用法示例吗,期望的结果是什么,即在HOCY之后from应该是什么样子?您实际上不需要一个更高阶的组件来实现这一点,并且您应该已经有了一个基于WrappedComponent
中表单的状态,因为输入元素应该在React中。如果你能弄清楚你的最终目标是什么,你想达到什么?丹尼斯瓦什:我已经编辑了描述。仍然请检查itOk,在HOC之后表单应该是什么样子表单将是相同的,我将把从HOC中的定制钩子返回的值作为道具传递给包装组件。