use*_*958 6 javascript reactjs redux
我正在使用React Redux教程.我真正没有得到的是如何检索用户输入.
他们构建了一个FilterLink容器,其mapDispatchToProps是
const mapDispatchToProps = (dispatch, ownProps) => {
return {
onClick: () => {
dispatch(setVisibilityFilter(ownProps.filter))
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此它将自己的Pop.filter注入连接的表示组件.如果我们去看看这个容器是如何构建的
const Footer = () => (
<p>
Show:{" "}
<FilterLink filter="SHOW_ALL">All</FilterLink>{", "}
<FilterLink filter="SHOW_ACTIVE">Active</FilterLink>{", "}
<FilterLink filter="SHOW_COMPLETED">Completed</FilterLink>
</p>
)
Run Code Online (Sandbox Code Playgroud)
好的,有"过滤器"属性.这很清楚.
现在我想在同一个例子上构建一个文本过滤器.首先,这是我的表现部分
const TodoSearch = ({onSubmit}) => (
<form
onSubmit={e => {
e.preventDefault()
onSubmit()
}}
>
<input placeholder="Text search" />
<input type="submit" value="Go" />
</form>
)
Run Code Online (Sandbox Code Playgroud)
但是当我来写容器时,我不知道如何获得用户输入
const mapDispatchToProps = (dispatch) => {
return {
onSubmit: () => {
dispatch(setTextSearch(????))
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我用jQuery $(#text).val()做的事情,但......这是最好的方法吗?
稍后在同一个教程中,他们构建了一个小表单来向列表中添加待办事项.好的,我们去看看他们如何捕获输入.
let AddTodo = ({ dispatch }) => {
let input
return (
<div>
<form onSubmit={e => {
e.preventDefault()
if (!input.value.trim()) {
return
}
dispatch(addTodo(input.value))
input.value = ''
}}>
<input ref={node => {
input = node
}} />
<button type="submit">
Add Todo
</button>
</form>
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
等等,这里的魔力在哪里?他们是否通过引用技巧为"输入"变量注入了价值?那是对的吗?那么如果有20个输入字段,我是否可以使用20个不同引用的20个变量?
感谢任何帮助,谢谢
将您的提交功能更改为以下内容。
const mapDispatchToProps = (dispatch) => {
return {
onSubmit: (evt) => {
dispatch(setTextSearch(evt.target.querySelector('input').value)
}
}
}
Run Code Online (Sandbox Code Playgroud)
还,
const TodoSearch = ({onSubmit}) => (
<form
onSubmit={e => {
e.preventDefault()
onSubmit(e)
}}
>
<input placeholder="Text search" />
<input type="submit" value="Go" />
</form>
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7886 次 |
| 最近记录: |