class SomeComponent extends React.Component{
onChange(ev){
this.setState({text: ev.currentValue.text});
}
transformText(){
return this.state.text.toUpperCase();
}
render(){
return (
<input type="text" onChange={this.onChange} value={this.transformText()} />
);
}
}
现在,如果我使用钩子重写这个组件:
function onChange(setText, ev) {
setText(ev.currentValue.text);
};
function transformText(text) {
return text.toUpperCase();
};
function SomeComponent(props) {
const [text, setText] = useState('');
return (
<input type="text" onChange={onChange} value={transformText()} />
);
}
现在的问题是,我需要分别将text
传递给transformtext
和settext
传递给onchange
方法。我能想到的可能的解决方案是:
编辑:这不是useCallback在React中所做的重复吗?因为我试图找出如何实现类似于以前用类组件方式完成的效果,虽然UseCallback
提供了一种实现方法,但对于可维护性问题来说,这并不理想。
这是您可以构建自己的钩子的地方(Dan Abramov敦促不要使用术语“自定义钩子”,因为它使创建自己的钩子比复制/粘贴逻辑更难/更高级)提取文本转换逻辑
简单地从穆罕默德的回答中“删除”下面评论的代码。
function SomeComponent(props) {
// const [text, setText] = React.useState("");
// const onChange = ev => {
// setText(ev.target.value);
// };
// function transformText(text) {
// return text.toUpperCase();
// }
const { onChange, text } = useTransformedText();
return (
<input type="text" onChange={React.useCallback(onChange)} value={text} />
);
}
并将其粘贴到一个新函数中(按照惯例,前缀为“use*”)。命名要返回的状态&回调(根据您的情况,可以作为对象或数组)
function useTransformedText(textTransformer = text => text.toUpperCase()) {
const [text, setText] = React.useState("");
const onChange = ev => {
setText(ev.target.value);
};
return { onChange, text: textTransformer(text) };
}
function UpperCaseInput(props) {
const { onChange, text } = useTransformedText();
return (
<input type="text" onChange={React.useCallback(onChange)} value={text} />
);
}
function LowerCaseInput(props) {
const { onChange, text } = useTransformedText(text => text.toLowerCase());
return (
<input type="text" onChange={React.useCallback(onChange)} value={text} />
);
}
function App() {
return (
<div className="App">
To Upper case: <UpperCaseInput />
<br />
To Lower case: <LowerCaseInput />
</div>
);
}
问题:在函数“selectmenu”中调用了React钩子“React.useEffect”,该函数既不是React函数组件,也不是自定义React钩子函数 目标:我只想在单击按钮时挂载组件('Component DidMount/WillUnmount)(使用useffect()),而不是在加载文件(或整个组件)时挂载 实际目标:我想在单击时选择(或突出显示)一个文件(自定义)。但是,当用户在文
我试图在一个功能组件中调用一个API,它是一个反应挂钩,并基于结果,重新呈现组件的内容。下面是代码: 调用API的组件- 以下是功能: 我正在尝试获取状态数据,并根据数据重新渲染组件。这里处于调用外部API的操作中。 正在调用操作并成功获取数据,但我不确定为什么状态正在更新-我得到了以下错误- 在函数“setResults”中调用React钩子“useState”,该函数既不是React函数组件,
问题内容: 注意:我在使用React Native时遇到了这个特定的问题,但是我想这也同样适用于React。 我有一个使用React.Component构建的React组件。我不需要设置状态,但是我有道具。我建议的语法如下: 我知道我可以使用函数来构造此组件,如下所示: 但是我更喜欢前者,因为我的组件会增长,可能会有状态等,我只想以相似的方式构建所有组件。 现在,我的linter抱怨拥有一个无用的
我没有在FabricJS事件中获得更新的状态值,如object:modified、mouse:up等。。。但我可以在回调函数中设置状态值。 当我试图获取状态值时,它返回的是初始值,而不是更新后的值。 例子: 初始值为0。我使用setCount将值更新为1。每当我试图在回调函数中获取“count”时,它都返回0或初始值。 编辑: 我试图实现的是,每当对象修改(对于撤销,重做操作)时,我试图保存Fab
我还没反应过来。我试图从REST APIendpoint发出GET请求,该endpoint应返回以下JSON: 要查询API,我使用以下代码: 我想创建一个函数,返回JSON中的注释列表。我最初的尝试如下: 但是,它给了我一个错误。从网上看,似乎大多数人的问题都可以通过将默认值设置为空字典来解决,但我已经在React钩子中这样做了。我很困惑为什么要发帖子。注释列表未定义。我还注意到,试图使用控制台
我正在构建一个制表符视图,我不明白为什么useState钩子没有更新我的状态。我肯定这是件容易的事,但我在这里已经被难住了一段时间... 我可以看到onPress函数已启动,如果我注销,则item.label是正确的。但是,即使我硬编码参数,setState也不会更改。