我是redux的新手,并尝试构建一个简单的应用程序,用户可以在其中投票选择自己喜欢的前端框架。我希望有一个用户单击以投票的工作流程,这将调度投票操作。在投票行动之后,将触发一个不同的行动来计算每个框架的总投票百分比。
我的商店/减速机设置如下:
module SOANS =
open System
let firstArray = [|0.02;0.03;0.05;0.07;0.11|]
let secondArray = [|0.30;0.50;0.70;1.10;1.30|]
let lenSecondArray = secondArray.Length
let thirdArray = Array.permute (fun index -> (index + (1)) % lenSecondArray) secondArray
thirdArray.[0] <- 0.00
let constant = 0.37
let result = Array.map3 (fun x y z -> (if y < 1.00 then (x - (constant * (y - z))) else 0.00)) firstArray secondArray thirdArray
printfn "Result: %A" result
(*
Expected Result: [|-0.091;-0.044;-0.024;0;0|]
Actual Result: [|-0.091;-0.044;-0.024;0;0|]
*)
我的点击处理程序触发了初始“投票”动作,这反过来触发了“计算百分比”动作。它们看起来像这样:
Get-GroupMembershipLocal([string] $UserName)
{
$strComputer = $Env:ComputerName
$User = [ADSI]("WinNT://$strComputer/$UserName,user")
$Groups = @()
$User.psbase.Invoke("groups") |foreach `
{
$groupname = [string] $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
$Groups += $groupname
}
return ,$Groups
}
$Groups = Get-GroupMembershipLocal "SomeUserName"
Write-Host ($Groups | Out-String)
动作创作者:
const combinedReducers = combineReducers({
"votes": votesReducer,
"currentPercentages": currentPercentageReducer,
"pastPercentages": pastPercentageReducer
});
let store = createStore(combinedReducers, applyMiddleware(thunk));
store.subscribe(() => {
console.log('store state is', store.getState())
})
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
最后 - 问题的核心。我的reducer处理更新当前投票百分比。
//click handlers
votedAngular(){
this.props.dispatch(castVote('angular'));
}
votedReact(){
this.props.dispatch(castVote('react'));
}
votedVue(){
this.props.dispatch(castVote('vue'));
}
有人可以解释一下这里发生了什么吗?
答案 0 :(得分:2)
我怀疑这里发生的是Math.floor
总是为分数返回0。在您的第一次投票中,您获得Math.floor(1/1) = 1
,但在下次投票时,您可能会获得Math.floor(1/2) = 0
。您能否确认如果您的前两张选票是针对相同的框架,您会看到正确的结果吗?请尝试使用Math.round(num * 100) / 100
。