gpt4 book ai didi

javascript - 通过 props 将函数列表传递给组件

转载 作者:行者123 更新时间:2023-12-01 02:36:29 24 4
gpt4 key购买 nike

假设您具有以下功能(或更多功能):

function hasValue(element) {
return (element.value && element.value.length);
}

function isLongerThan(element, minLength){
return element.value.length > minLength;
}

您会如何尝试通过 props 将这些作为函数列表传递给组件?

我尝试过类似的事情:

<MyInputComponent runThese={[hasValue, isLongerThan]} />

或者

<MyInputComponent runThese={[() => hasValue(), () => isLongerThan()]} />

但是这些函数需要 element 参数(它是 MyComponent 的子节点)以及其他参数才能工作。

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

以下示例展示了如何将函数传递给组件并运行它们。我们在数组中传递两个函数:hasValueisLongerThan。然后,我们设置一个 onChange 事件监听器来调用数组中的函数。如果所有输入函数都通过(返回true),我们将输入的状态设置为valid

对于isLongerThan,我们将创建一个函数来返回一个函数,因此我们可以设置minLength值。

运行下面的代码片段,然后在输入中输入一些值。在输入值的长度大于 3 之前,您将看到记录的 false

function hasValue(element) {
return (element.value && element.value.length);
}

function isLongerThan(minLength) {
return function(element) {
return element.value.length > minLength;
}
}


class MyInputComponent extends React.Component {
constructor(props) {
super(props)
this.state = {
valid: false
}
}

handleChange = (event) => {
this.setState({
valid: this.props.runThese.every(func => func(event.currentTarget))
})

}

render() {
return (
<input type="text" onChange={this.handleChange} className={(this.state.valid ? 'valid': 'invalid' )}/>
)
}
}


ReactDOM.render( <MyInputComponent runThese={[hasValue, isLongerThan(3)]} />, document.getElementById("app"))
input {
outline: none;
}

.valid {
border: 3px solid green;

}

.invalid {
border: 3px solid red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="app"></div>

关于javascript - 通过 props 将函数列表传递给组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47869928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com