[英]Selected value from semantic ui react dropdown not appearing when selected
[英]Display selected value from dropdown using semantic ui React
我真的是 React 的新手,Redux。 我正在尝试从下拉列表中显示选定的值,使用语义 ui。 我在 state 更新但无法在屏幕上显示值,并且下拉列表未关闭(添加后 closeOnChange- 无法识别此属性,为什么?}
** 组件.js**
const ProductDetails = () => {
const {productId} = useParams()
const selectedProd = useSelector((state) => state.allProducts.products.find(product =>
product.id === parseInt(productId)
));
const products = useSelector((state) => state.allProducts.products)
let {rank} = selectedProd
const dispatch = useDispatch()
const handleDropDownSelect = (event) => {
//update rank
selectedProd.rank = parseInt(event.dataset.value)
//update allProducts
dispatch(updateProducts(products,selectedProd))
}
return(
<div className="ui left floated simple selection dropdown" value={rank} onClick={e=>handleDropDownSelect(e.target)}>
<i className="dropdown icon"></i>
<div className="default value" value={rank}></div>
<div className="left floated menu" >
<div className="item" data-value="1" data-key="1">1</div>
<div className="item" data-value="2" data-key="2">2</div>
<div className="item" data-value="3" data-key="3">3</div>
<div className="item" data-value="4" data-key="4">4</div>
<div className="item" data-value="5" data-key="5">5</div>
</div>
</div>)
redux/reducers/actions.js
export const updateProducts = (products,product) => {
const indexOfItem = products.findIndex(q => q.id === product.id);
if (indexOfItem > -1) {
products[indexOfItem] = product;
}
return {
type: ActionTypes.SET_PRODUCTS,
payload: products
};
};
redux/constans/types.js
export const ActionTypes = {
SET_PRODUCTS: "SET_PRODUCTS",
}
redux/reducers/index.js
import { combineReducers } from 'redux'
import { productReducer} from './productReducer'
const reducers = combineReducers({
allProducts: productReducer,
})
export default reducers
我错过了什么?
这很可能是您没有更改state.allProducts.products
的引用,因此 React 不会重新渲染 UI
您应该将map
产品作为Redux Todos 示例
并添加一个在线演示,如CodeSandBox将帮助我们为您提供更好的建议
好的,根据codesandbox.io/s/products-forked-kmbwz的演示,这里我们至少有两个问题:
ProductDetails
在下拉 select 机会后没有重新呈现,因为您没有更改selectedProd
的引用。 查看我从你的分叉的这个链接,查看第 14-15 行的文件/src/Components/ProductDetails.js
,我添加了一个 console.log 来调试组件是否会被重新渲染。 在第 31-33 行,我通过解构赋值更改了 new selectedProd
的引用。 当您单击下拉选项时,UI 将重新呈现,因为您会看到日志。
div
。 但是div
没有value
属性,你应该像我在第 54 行那样显式显示它。handleDropDownSelect
事件,所以有时候会看到NaN我真的建议您在开始之前遵循官方的 Redux Todos 示例。 而你在这里面临的问题是,React 会在数据(props/state)发生变化时自然呈现 UI,因此数据的引用是否发生变化对 React 很重要。 随着你玩 React 的时间越长, Immerjs 之类的不可变数据结构就会有很大帮助。 再一次,Redux 或 React 文档比我解释的要详细得多,阅读它们
我们想帮助您,但代码太少(尤其是缺少 redux 部分以及您如何传递值/函数来反应组件)。 请链接您的存储库/向我们展示更多代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.